自定义malloc实现存在跨操作系统的异常性能差异问题
自定义malloc实现的跨平台性能差异问题
背景
课程中使用了一篇讲解内存分配器的文章中的自定义malloc实现,代码基于对应的开源实现编写,同时我编写了如下测试程序进行大量内存分配测试:
#include <stdlib.h> #define MAXITERS 100000 #define MAXSIZE 1024 int main(int argc, char* argv[]) { float pfree = atof(argv[1]); int niter = rand() % MAXITERS; for(int i = 0; i < niter; i++ ) { int size = rand() % MAXSIZE; void* p = malloc(size * sizeof(char)); float toss = (float)random() / RAND_MAX; if ( toss > pfree ) free(p); } return 0; }
性能异常情况
该测试程序在WSL2、Ubuntu 23、Fedora 39上运行耗时约30秒,但在搭载M3 Pro的MacBook和M2 Air的MacBook上仅需约1秒。
编译运行命令
Linux环境下的编译运行步骤:
gcc -Wno-deprecated-declarations -o libmemalloc.so -fPIC -shared memalloc.c export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH gcc testalloc.c -o testalloc -L. -lmemalloc ./testalloc 0.5
MacOS环境下无需执行export LD_LIBRARY_PATH即可直接运行,我怀疑这是否是性能差异的根源?二者的环境变量功能是否存在差异?
验证与已尝试方案
- 已通过在malloc实现中添加代码
int x = x/0; printf("%d", x);确认MacOS确实在使用自定义实现:Linux下程序会崩溃,MacOS下则输出0 - 已尝试的解决方向:在多台不同Linux设备上测试;使用LD_PRELOAD等不同编译命令,但性能依旧低下且会影响终端程序;添加错误代码验证自定义实现的加载情况
- 相关代码已上传至个人仓库,恳请帮忙测试并解决性能问题
内容的提问来源于stack exchange,提问作者Marco Gonçalves
相关产品推荐
相关产品推荐

