- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当 sbrk() 返回指向堆起始地址的指针时,地址是升序还是降序?例如,如果我有一个从地址 1 到 10 的 10 字节堆,sbrk() 会返回指向地址 10 或 1 的指针吗?
类似地,堆地址往往会“下降”......但是我如何才能确定地址在我的计算机上是增加还是减少?
最佳答案
Mac OS X 的手册页说:
The
brk
andsbrk
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 witherrno
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 betweenaddr
and the lowest stack pointer to the stack segment. Memory is allocated bybrk
in page size pieces; ifaddr
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/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!