本文主要是介绍利用编译器得知动态分配数组的大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每次在CSDN论坛C++板块闲逛,都会有很多收获,时常遇到一些精彩的回复。
原帖地址http://community.csdn.net/Expert/topic/4822/4822941.xml?temp=.5199396中,摘录triace_zhang的回复如下:
主要看编译器采用的策略。如果是vc6.0的话在动态分配的内存段前面16个字节会用一个cookie记录该内存段的大小,取这个cookie只要:
int *p = new int[100];
int i = *(int*)( (char*)p - 4 * sizeof( int ) ); //i就是内存段大小
而有些其他编译器如dev c++采用映射map的形式,对于所有变量,用变量名为key,在map里对应每个变量名存贮变量大小。这种方法的话要找到映射map比较困难,暂时还没有什么好方法。
另外:上述都是Project configurations设置为Debug的情况,如果为Release则无效。这个的原因,以我的水平就明白不了了。希望有高人能够解释一下。
这篇关于利用编译器得知动态分配数组的大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!