gpt4 book ai didi

c - 如何使用我们自己的函数分配动态内存(不使用malloc)

转载 作者:行者123 更新时间:2023-11-30 21:41:52 25 4
gpt4 key购买 nike

如何用我们自己的函数分配动态内存

不使用malloc(),如何使用C语言分配动态内存。

最佳答案

如果没有底层操作系统的支持,您将无法获得新的堆内存。我假设您有一个 POSIX 操作系统,例如Linux。

您可以定义自己的 malloc,但是(在托管 C 实现中)大多数库函数假定它具有传统语义(对 malloc 的两次连续且成功的调用没有任何 free-s 生成两个指向不同非重叠内存区域的无别名指针)。

实际上,您的系统 malloc 通常是通过使用像 mmap(2) 这样的系统调用从地址空间中的虚拟内存查询新段(4K 字节页面的倍数)来实现的。 。但是您的标准 C 库 malloc 在调用 mmap 之前会努力重用之前的 free-d 内存区域,并且它会分配一些“大”内存区域(例如128Kbytes 或 1Mbytes)内存块使用 mmap 并将其组织为一组内存区域(细节很复杂,因为大多数 malloc 实现都是针对实际常见用例进行优化的)。通常,malloc 处理小分配的方式与处理大分配的方式不同。有时(但大多数情况下不会),malloc 实现可能会使用例如以下方式将内存释放给内核: munmap 但这在实践中并不经常发生。因此,在实践中,一个在许多小区域中使用 malloc 分配大量内存并使用 free 分配的进程几乎所有这些区域仍然保留大量内存(无需任何 mmap 即可重用它)

关于c - 如何使用我们自己的函数分配动态内存(不使用malloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332639/

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