gpt4 book ai didi

C: sbrk() 地址升序还是降序?

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:49 25 4
gpt4 key购买 nike

当 sbrk() 返回指向堆起始地址的指针时,地址是升序还是降序?例如,如果我有一个从地址 1 到 10 的 10 字节堆,sbrk() 会返回指向地址 10 或 1 的指针吗?

类似地,堆地址往往会“下降”......但是我如何才能确定地址在我的计算机上是增加还是减少?

最佳答案

Mac OS X 的手册页说:

The brk and sbrk functions are historical curiosities left over from earlier days before the advent of virtual memory management.

The current value of the program break is reliably returned by sbrk(0).

The sbrk function returns a pointer to the base of the new storage if successful; otherwise -1 with errno set to indicate why the allocation failed.

假设您使用:

void *base = sbrk(1024);

之后,假设没有错误,base 将包含 1024 字节(最小)内存块的起始地址; (char *)base + 1024 将超出您的要求,但它可能仍然有效,因为页面大小可能大于 1024。

它没有直接说明后续分配的地址是否比另一个分配更大或更小。但是,它很可能是按地址递增顺序排列的。

The brk() function sets the break or lowest address of a process's data segment (uninitialized data) to addr (immediately above bss). Data addressing is restricted between addr and the lowest stack pointer to the stack segment. Memory is allocated by brk in page size pieces; if addr is not evenly divisible by the system page size, it is increased to the next page boundary.

这意味着额外的空间在 data 和 bss 段之后,并且向堆栈增长(在内存中向下增长)。但是,依靠那个可能是蛮干的。在调用sbrk(extra)获得额外空间后,最好使用sbrk(0)建立当前端;这会告诉您您真正得到了什么,这两个地址会告诉您它在哪里可用。

关于C: sbrk() 地址升序还是降序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399590/

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