堆栈的初始值应如何设定。

发布网友 发布时间:2022-03-29 17:29

我来回答

1个回答

热心网友 时间:2022-03-29 18:58

栈的初始化较简单,只需要初始化sp的值,因此只需一条汇编指令
init_stack:
ldr sp, =0x34000000
(2440的内存起始地址为0x30000000,现在分给该进程的栈64MB的空间,64MB占用的地址数为0x4000000,加上起始地址0x30000000,为0x34000000)

当你通过brk(),sbrk()或mmap()为你的过程获得新的记忆时,它保证被清零。 但是进程堆栈已经分配给您的进程。alloca()函数没有获得新的堆栈空间,它只返回当前堆栈指针并将指针移动到新块的末尾。 因此,alloca()返回的内存块之前已被您的进程使用。即使你在main中的alloca()之前没有函数,C库和动态加载器也一直在使用堆栈。
根据SP指针指向的位置,栈可以分为满栈和空栈。
1.满栈:堆栈指针SP总是指向最后压入堆栈的数据。
2.空栈:堆栈指针SP总是指向下一个将要放入数据的空位置
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com