【发布时间】:2011-01-05 14:28:02
【问题描述】:
在my question yesterday 之后,我尝试更多地了解调用堆栈的架构。在线和 SO 搜索没有产生我正在寻找的答案,这可能是因为我不确切知道要使用哪些关键字。无论如何,我相信这里有人可以帮助我......
首先,让我们从 Wikipedia 中stack buffer overflow 条目的摘录开始:
在软件中,当程序写入预期数据结构之外的程序调用堆栈上的内存地址时,会发生堆栈缓冲区溢出;通常是一个固定长度的缓冲区。
一位同事告诉我,他记得了解到,在 Linux 上,堆栈位于进程虚拟内存的最后,并根据需要向后增长——因此它不是“固定长度缓冲区”。但是,我无法证实这一点。所以我的问题是:
- 在 Windows 和 Linux 上是调用 堆栈总是一个固定大小的缓冲区?如果 不是,它是如何生长的?怎么做的 管理共享虚拟内存 堆?
- 堆栈的架构取决于 使用的编译语言?在 操作系统?在硬件上?
- 是大小 堆栈的确定在 编译时或可以更改 后验?
- 如何以及在哪里 单个线程的调用堆栈 分配?
【问题讨论】:
标签: architecture memory multithreading stack