利用編譯器得知動態分配數組的大小

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

發佈了38 篇原創文章 · 獲贊 157 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章