簡體   English   中英

realloc 和 calloc 是否調用 malloc?

[英]Does realloc and calloc call malloc?

這可能是一個簡單的問題,但我找不到答案。 malloc 是否在 realloc 和 calloc 內部調用? 由於我以某種方式計算 malloc 調用,這對我來說很有趣。 謝謝

您不應該嘗試依賴系統、庫或編譯器相關機制。 即使您知道 realloc 在一個系統/編譯器/庫上調用 malloc,您也不能確定它會在其他系統上以相同的方式處理。

此時的問題是,您要達到的目標是什么。 如果您需要跟蹤 memory 的使用情況,C++ 中有更好的方法,例如為操作員 new 和 delete 安裝全局替換。 在 Linux 的某些版本中,您還可以向 malloc 添加掛鈎(盡管從未使用過此功能)。 在其他系統上,您可以使用其他機制來更安全地實現您的需要。

由於您正在使用 Linux,因此您可能正在使用 glibc。 您可以查看glibc malloc 源代碼,並看到它從 calloc 等函數調用了名為 __malloc_hook 的東西。 這是一個記錄在案的功能,您可以使用它來攔截和計算分配。 您可以從mallinfo獲得其他有用的統計信息。 但是看看是否有一個現有的工具可以首先實現你想要的。 Memory 管理調試和統計是通用需求!

您可以編寫簡單的測試程序,調用 realloc 和 calloc 並將其提供給 callgrind(Valgrind 的工具之一)。 它將顯示調用圖,因此您可以檢查 malloc 和 calloc 在您的 libc 實現上調用了哪些函數。

我們不知道語言標准。 C99 沒有說明函數是否相互調用。

C++ 僅表示malloc不能調用new ,但對 function 沒有其他此類限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM