每次在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則無效。這個的原因,以我的水平就明白不了了。希望有高人能夠解釋一下。