我編寫了一個測試C++程序來檢查valgrind的輸出。該代碼是爲什麼valgrind在64位程序中報告指針的大小爲4字節
#include <iostream>
void f() {
int *pp = new int(1);
std::cout << "pp is " << *pp << "\n";
}
int main() {
f();
return 0;
}
我用的valgrind命令是
valgrind --leak-check=yes ./a.out
從Valgrind的輸出是
==2255== HEAP SUMMARY:
==2255== in use at exit: 4 bytes in 1 blocks
==2255== total heap usage: 1 allocs, 0 frees, 4 bytes allocated
==2255==
==2255== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==2255== at 0x4C2B1C7: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2255== by 0x400786: f() (in /run/shm/a.out)
==2255== by 0x4007CC: main (in /run/shm/a.out)
==2255==
==2255== LEAK SUMMARY:
==2255== definitely lost: 4 bytes in 1 blocks
==2255== indirectly lost: 0 bytes in 0 blocks
==2255== possibly lost: 0 bytes in 0 blocks
==2255== still reachable: 0 bytes in 0 blocks
==2255== suppressed: 0 bytes in 0 blocks
我使用的是Ubuntu的機器: Linux的太陽3.2.0-27 -generic#43-Ubuntu SMP Fri Jul 6 14:25:57 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
gcc版本我用 「4.6.3」
GCC參數 「-g -m64」
我覺得應該是八個字節,對不對?
是的。我認爲你是對的,因爲int在我的平臺上是4個字節。 –