cmake字符串转数组_《转知乎》如何利用 C++ 数组指针中的数组大小信息?

int *p = new int[10];

delete [] p;

既然 delete 时无需提供数组大小,那么显然编译器是知道数组的大小(或者说界限的)。

那么

编译器是如何知道数组大小的?(比如维护了一张表、按特定格式存储……)

既然知道数组大小,编译器能否自动检查数组越界的情况?不检查是否是为了性能?

编程时如何利用这份信息?

另外,不借助搜索引擎如何解答这个问题,有类似文档之类的东西可以参考吗?修改

1:拿msvc来说,在new/malloc返回的ptr前n个字节里保存了大小,msvc还可以用_msize()来获得size,具体保存在哪可以调试看看;

2:编译器未必知道,有些size是运行时决定的.真正记录大小是在运行时,而不是编译期.数组越界不能自动检查,ptr + offset,这种方式程序无法知道程序员的本意要访问的到底是不是数组那块内存

3:特定环境下可能有用啊.(例:一个妹子问我在vs里怎么通过一个new出来的指针获得size,然后就可以利用这些信息换妹子崇拜的眼神)

PS:上调试器.

作者:吉林小伙

链接:https://www.zhihu.com/question/27112272/answer/35301722

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1:new的时候已经多new了点空间把长度写进去了

2:不能检查,因为不是所有的指针都是new出来,谁知道到底指向的是什么

3:根据C++标准的话,没办法利用

4:反正VC++已经98%以上跟标准完全一致了,而且gcc跟clang的私货也不比VC++少,你去msdn看C++语法手册就好了 C++ Language Reference,手册只要你读两遍,你就什么都明白了。我初三就是读了两遍VC++5.0时代的msdn的语法手册学会C++的。当然要熟悉还是要靠练习,光读的话就算都记住了,也只能一知半解。

作者:vczh

链接:https://www.zhihu.com/question/27112272/answer/35291952

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted on 2016-03-22 10:21 Enic 阅读(171) 评论(0)  编辑 收藏 引用 所属分类: C/C++技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值