You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:33:09