我正在尝试实现一个简单的第一个内存管理算法.所以我有一个自己的C文件
void* malloc(size_t)
Run Code Online (Sandbox Code Playgroud)
和
void free(void*)
Run Code Online (Sandbox Code Playgroud)
.out使用gcc 生成文件时,我期待链接错误,因为它会与现有的标准实现冲突.但我的文件链接很好.
请帮我理解.
我期待链接错误,因为它会与现有的标准实现冲突.
您的期望是不正确的:大多数UNIX libc实现支持使用其他一些malloc.为此,便将malloc,realloc,free等任一成一个单独的对象文件,或者每到它自己的一个目标文件.
该连接器是那么自由更换malloc.o的libc.a与您的实现.您可以在此处阅读链接器使用的算法.一旦理解了算法,就应该清楚为什么链接自己的算法malloc并且free不会导致链接错误.
UNIX共享库被明确设计为模拟归档库,因此虽然链接时没有链接错误的原因的细节libc.so是不同的,但精神是相同的.
但是,你没有完成.链接任何适度复杂的程序与实施,将有可能崩溃,因为当你更换malloc,您还需要实现realloc,并有可能calloc和memalign和posix_memalign.否则,你将得到各种实现,当有人将realloced指针传递给你时free,事情可能会爆炸.