我想要替換默認的malloc並添加一些統計信息以及泄漏檢測和malloc函數的其他行爲。我已經看到了一些其他的如gperftool和jemlloc。他們可以通過鏈接靜態庫來替換默認的malloc。他們怎麼能這樣做?我想實現我的自定義malloc函數。如何通過代碼替換默認的malloc
2
A
回答
2
你可以環繞原始的malloc。
static void* (*r_malloc)(size_t) = NULL;
void initialize() {
r_malloc = dlsym(RTLD_NEXT, "malloc");
}
void* malloc(size_t size) {
//Do whatever you want
return r_malloc(bsize);
}
但是,不要忘記你也必須環繞calloc和realloc大概。在libc中也有不太常用的功能來分配內存。
要包裝calloc,你需要做一個骯髒的黑客攻擊,因爲dlsym嘗試使用calloc分配內存,但並不真正需要它。
static void* __temporary_calloc(size_t x __attribute__((unused)), size_t y __attribute__((unused))) {
return NULL;
}
static void* (*r_calloc)(size_t,size_t) = NULL;
,並在初始化函數補充一點:
r_calloc = __temporary_calloc;
r_calloc = dlsym(RTLD_NEXT, "calloc");
相關問題
- 1. 如何替換arduino引導程序中的默認代碼
- 2. 在此代碼中替換malloc/free
- 3. 如何通過國家代碼來從ICU庫默認languge
- 4. 如何替換默認的SortArgumentResolver
- 5. 如何通過默認
- 6. 如何通過默認
- 7. 如何通過默認
- 8. 如何找到我有下面的代碼通過的malloc
- 9. 如何通過在EF Core中實現的自定義替換默認的SqlServerConventionSetBuilder?
- 10. 如何替換默認啓動畫面
- 11. 如何替換默認處理程序
- 12. 如何替換select2默認微調器?
- 13. 替換默認的MessageBox
- 14. 替換默認的TomcatServerFactory
- 15. mmap替代malloc
- 16. Laravel 5.3通過Cartalyst/Sentinel完全替代默認身份驗證
- 17. 如何用新的示例替換malloc
- 18. 如何通過默認的Joomla
- 19. 如何通過替代
- 20. 如何切換通過代碼
- 21. 如何通過代碼分配變換
- 22. 替換默認Elasticsearch得分
- 23. Log4J2屬性替換 - 默認
- 24. 替換用作默認表
- 25. 替換引導默認css
- 26. PHPMailer:替換默認messageID
- 27. 熊貓替換默認值
- 28. Prevent默認替代IE8
- 29. 設置默認的喜好來打印機通過代碼
- 30. 通過C#代碼更改Windows 7上的默認語音
只寫你自己的'malloc'用正確的簽名功能。鏈接器會更喜歡你的實現到標準的C庫。要在你的函數中分配內存,使用你的操作系統的API(這是...?)。 –