2011-08-23 36 views
1

一些Linux代碼在100個地方調用malloc,我需要知道任何一個塊有多大。 通常我只是將這些大小記錄在my_malloc函數中,但在這種情況下我不允許這樣做。有什麼辦法可以讓malloc子系統爲malloc'd指針提供塊大小嗎?獲取malloc'd內存塊的大小?

+0

一個密切相關的問題:http://stackoverflow.com/questions/5451104/how-to-get-memory-block-length-after-malloc –

回答

0

不幸的是,沒有辦法做到這一點。

+0

沒有*便攜式*的方式來做到這一點,但一個非如果目標是調試問題,便攜式黑客可能已經足夠好了。 –

1
*((size_t *)ptr - 1) & ~7 

/me covers。

+1

哎。不確定這是否適用於64位系統。而且我幾乎可以肯定它對於超過128k左右的malloc()(對於glibc將使用mmap)不起作用。但對於一個快速黑客來說,這個主意不錯:-)。 – Nemo

+0

嚴重,'int'的大小?耶穌。 *((size_t *)ptr - 1)&〜8'至少。 –

+0

這是什麼? – Daniel

3

最好的辦法是使用LD_PRELOAD trick來攔截對malloc的調用(定義爲here)。你甚至不需要重新編譯你的源代碼。

根據您試圖發現的內容,Google Perftools也可能有用。

+1

我不得不穀歌了一下,找出什麼LD_PRELOAD技巧_is_,請鏈接http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick在你的答案:) – Kimvais

+0

@Kimvais :嗯,我鏈接到示例代碼,發現它總是比單句定義更好:-)。好的,我還添加了其他SO問題的鏈接。 – Nemo

+0

謝謝。我想我只是那種認爲它是如何工作的人_是比它更有趣的問題__ :) – Kimvais