每次在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则无效。这个的原因,以我的水平就明白不了了。希望有高人能够解释一下。