gpt4 book ai didi

c - 为什么我提供自己的 malloc 和 free 时不会出现链接错误?

转载 作者:太空狗 更新时间:2023-10-29 16:56:16 24 4
gpt4 key购买 nike

我正在尝试实现一个简单的适合优先内存管理算法。所以我有一个 C 文件和我自己的

   void* malloc(size_t)

   void free(void*)

当用 gcc 生成 .out 文件时,我预计会出现链接错误,因为它会与现有的标准实现冲突。但我的文件链接正常。

请帮助我理解。

最佳答案

I'm expecting a link error because it'll conflict with the existing standard implementation.

您的期望是不正确的:大多数 UNIX libc 实现都支持使用其他一些 malloc。为此,他们将 mallocreallocfree 等放入单独的对象文件中,或者分别放入自己的对象文件中.

然后链接器可以自由地将 libc.a 中的 malloc.o 替换为您的实现。您可以阅读链接器使用的算法 here .一旦理解了该算法,就应该清楚为什么链接您自己的 mallocfree 不会导致链接错误。

UNIX 共享库明确设计用于模拟存档库,因此虽然在使用 libc.so 链接时不会出现链接错误的细节有所不同,但精神是相同的。

但是,您还没有完成。将任何中等复杂的程序与您的实现链接起来都可能会崩溃,因为当您替换 malloc 时,您需要实现 realloc,并且很可能 callocmemalignposix_memalign。否则,您将混合实现,当有人将 realloced 指针传递给您的 free 时,事情可能会爆炸。

关于c - 为什么我提供自己的 malloc 和 free 时不会出现链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17020497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com