gpt4 book ai didi

c - malloc() 如何知道堆从哪里开始?

转载 作者:太空狗 更新时间:2023-10-29 14:54:02 30 4
gpt4 key购买 nike

当操作系统将进程加载到内存中时,它会将堆栈指针初始化为虚拟地址,它已决定堆栈在进程的虚拟地址空间中的位置,程序代码使用此寄存器来了解堆栈变量的位置。我的问题是 malloc() 如何知道堆从哪个虚拟地址开始?堆是否总是存在于数据段的末尾,如果是,malloc() 如何知道它在哪里?或者它甚至是一个连续的内存区域,还是只是随机散布在数据部分中的其他全局变量?

最佳答案

malloc 实现依赖于操作系统;他们用来获取堆开始的过程也是如此。在 UNIX 上,这可以通过调用 sbrk(0) 来完成。在初始化时。在其他操作系统上,过程不同。

请注意,您可以在不知道堆位置的情况下实现malloc。您可以将空闲列表初始化为 NULL,并在每次找不到合适大小的空闲元素时调用 sbrk 或具有分配大小的类似函数。

关于c - malloc() 如何知道堆从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793750/

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