社区
C++ 语言
帖子详情
堆栈(栈,Stack)?????
aaassd
2003-12-16 07:01:36
堆栈(栈,Stack)是操作系统为每一个运行的线程分配的内存空间,用来保存函数调用的现场、参数、返回值、变量的值。堆栈创建以后大小固定。
在函数里用到局部变量的时候,是通过栈地址+偏移吗?
它把这两个地址保存在哪里呢,用的时候就可以找到呢?
如果变量多了呢?
...全文
51
15
打赏
收藏
堆栈(栈,Stack)?????
堆栈(栈,Stack)是操作系统为每一个运行的线程分配的内存空间,用来保存函数调用的现场、参数、返回值、变量的值。堆栈创建以后大小固定。 在函数里用到局部变量的时候,是通过栈地址+偏移吗? 它把这两个地址保存在哪里呢,用的时候就可以找到呢? 如果变量多了呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dindon
2003-12-18
打赏
举报
回复
谁能回答一下我的那个菜鸟问题啊?!我记得对否?
AllanJD
2003-12-17
打赏
举报
回复
搬个板凳,学习一下。
-_-!
aaassd
2003-12-17
打赏
举报
回复
源程序编译成可执行文件后,各个函数中每个局部变量相对于栈指针的编译就已经固定了
所以到时候只需一个寄存器保存机制就可以了
我就是想知道这里是怎么实现的?
谢谢楼上的回答,分不是问题,我可以再开贴.
FrankZhang123
2003-12-17
打赏
举报
回复
int f()
{
int a1;
int a2;
int a3;
return 100;
}
=>
f()
{
保存当前栈指针寄存器ESP
EBP=ESP
于是&a1=EBP,&a2=EBP+4,&a3=EBP+8
这是根据定义变量的顺序算出来的
...
EAX=100,设置返回值
ret
}
aaassd
2003-12-17
打赏
举报
回复
那我的问题还是没有结果.
dindon
2003-12-17
打赏
举报
回复
base就是栈的基地址
aaassd
2003-12-17
打赏
举报
回复
那我问一下吧base是什么呢?
dindon
2003-12-17
打赏
举报
回复
好像编译原理里面有个什么表吧,好像可以保存比如局部变量对应的偏移量什么的。请高手回答是不是酱紫的捏?(我是菜鸟,说错了指出来就好了,千万不要骂啊^_^)
hanyixin
2003-12-17
打赏
举报
回复
已经有一个指针指向Base了的,那个4是编译器分配好的,表示在偏移为4的那个地址上放的是 a 。
aaassd
2003-12-17
打赏
举报
回复
谢谢
这个可以理解,但我想问的是:当我用到a它是如何找到[Base+4]的?
hanyixin
2003-12-17
打赏
举报
回复
是减不是加,失败 :(
hanyixin
2003-12-17
打赏
举报
回复
|Base|
| a |
| b |
| c |
象这样,abc的位置都是固定好了的,函数执行的时候,有一个指针指向Base那个地方,所以[Base+4]就是a,[Base+8]就是b。
aaassd
2003-12-17
打赏
举报
回复
a+b*c;(每个都有值)
这里的a,b,c是内存中的三个数.
如果是汇编计算这个,我们事先要知道a,b,c三个数的地址.
如果是在c++中(局部变量考虑)a=1;b=2;c=4;
d=a+b*c;三个数是在临时调用函数时
分配的地址.也就是在栈里的位置.当执行到d=a+b*c时怎么找到具体的位置呢?
也就是说编译器见到c就知道到c的位置去取值,这个过程是怎么实现的呢?
robertcarlos
2003-12-16
打赏
举报
回复
steedhorse(晨星)好久不见,你还是那样的厉害~
晨星
2003-12-16
打赏
举报
回复
源程序编译成可执行文件后,各个函数中每个局部变量相对于栈指针的编译就已经固定了。
所以到时候只需一个寄存器保存机制就可以了。
你所谓变量“多”到底是多少?几兆个?还是几吉个?反正多到一定程度,超过了栈的大小,总归会溢出的。
退一万步说,你的内存是有限的,而且CPU的取址空间也是有限的。
堆
栈
(
Stack
)实现(C++)
一.
堆
栈
(
Stack
)
堆
栈
(
Stack
) 是一种可以存取的数据结构,其主要特征是先进后出(Last-in-first-out, LIFO)
栈
顶(Top) 是最后入
栈
的数据
堆
栈
可分为静态
堆
栈
(Static
Stack
)和动态
堆
栈
(Dynamic
Stack
)两类: Static
Stack
:
栈
的大小固定,可以用数组实现; Dynamic
Stack
:
栈
的大小随需要改变,可以用链表实现 二. 基本操作(Basic Operation) 入
栈
(Push):Equivalent to an in
说一下
堆
栈
的区别?
总的来说,
堆
栈
和堆在管理方式、空间大小、分配速度、碎片问题和存储内容等方面都存在显著的区别。在编程时,需要根据具体的需求和场景来选择合适的内存管理方式。
堆
栈
的
栈
顶和
栈
底在哪_【c# .net】
堆
栈
(
Stack
)
堆
栈
(
Stack
)1.简介
堆
栈
(
Stack
)代表了一个后进先出的对象集合。注意:后进先出指的是后面添加的元素会排在集合的顶部也就是最前面,按照从后往前添加元素的规则就像一个,一端封闭,一端开口的圆筒因为只有一个出口,所以后进先出
栈
(
stack
)是一种线性数据结构,它就像一个上图所示的放入乒乓球的 圆筒容器。最早进入的元素存放的位置叫作
栈
底 (bottom),最后进入的元素 存放的位置叫作
栈
顶 (t...
堆
栈
(
stack
)的四种类型
堆
栈
严格来说应该叫做
栈
(
stack
),先入后出 四种类型:满增
栈
、满减
栈
、空增
栈
、空减
栈
。 满、空
栈
区别:根据当前指针所在位置是否有东西。 满
栈
(full
stack
):
栈
指针指向最后压入
栈
的数据,数据入
栈
时,sp先减一(或加一)再入
栈
。 空
栈
(empty
stack
):
栈
指针指向下一个将要放入数据的位置,数据入
栈
时,先入
栈
sp再减一(或加一)。 增、减
栈
区别:根据
堆
栈
的
堆
栈
(
Stack
)和堆(Heap)
堆
栈
(
Stack
)和堆(Heap)是两种不同的内存分配方法,它们的主要区别在于数据存储和访问的方式。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章