我已经看到很多代码库特别是服务器代码有基本的(有时是高级的)内存管理器.内存管理器的真正目的是减少malloc调用的次数,还是主要用于内存分析,损坏检查或可能是其他以应用程序为中心的目的.
保存malloc调用的参数是否足够合理,因为malloc本身就是一个内存管理器.我可以理解的唯一性能增益是当我们知道系统总是要求相同大小的内存时.
或者拥有内存管理器的原因是free不会将内存返回给操作系统但会保存在列表中.因此,在进程的生命周期中,如果由于碎片而继续执行malloc/free,则进程的堆使用可能会增加.
我正在尝试链接中提到的问题:https://sourceware.org/ml/libc-alpha/2009-06/msg00168.html
我在代码中做了一些修改,如下所述:
>> Cat libdep.c
#include <stdio.h>
int duplicate = 'u';
int get_duplicate() {
printf("libdep sees duplicate as: %c\n", duplicate);
printf("libdep sees duplicate address as: %x\n", &duplicate);
return duplicate;
}
--------------------------------------------------------------------------------------
>> Cat dynamic.c
#include <stdio.h>
extern int duplicate;
int run() {
duplicate = 'd';
printf("dynamic sees duplicate from libdep as: %c\n", duplicate);
printf("dynamic sees duplicate address as: %x\n", &duplicate);
printf("but libdep sees duplicate from main as: %c\n", get_duplicate());
return 0;
}
-------------------------------------------------------------------------------------------------
Cat main.c
#include <stdio.h> …
Run Code Online (Sandbox Code Playgroud)