Yur*_*urt 1 c linux assembly x86-64 stack-memory
好吧,我的问题如下,我在某处看到一个linux进程在堆栈上分配8 MiB供使用,例如,如果我有一个C程序,我只在堆栈上分配两个变量,这是正确的说法我分配了或者更好地说我只是重复使用了该空间?由于进程在堆栈上分配 8 MiB,因此它不取决于我将在程序中使用的大小,只要它不超过我的堆栈,即无论哪个术语合适,我都会在堆栈或者我将重用Linux进程已经分配的数据?
#include <stdio.h>
void f() {
int x = 5;
printf("Value = %d End = %p\n", x, &x);
}
void g() {
int y = 10;
printf("Value = %d End = %p\n", y, &y);
}
int main(){
f();
g();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
看到地址将是相同的,因为我重复使用了已经分配的大小,而 malloc 不会发生同样的情况,总结术语“在堆栈中分配正确的数据”不是很正确?
堆栈是在进程中预先分配的吗?
在基于堆栈的体系结构上,进程从执行开始就有可用的堆栈空间。这可以被描述为“预先分配”。但是,请注意,在某些情况下,进程的堆栈可能会在进程的生命周期内扩展。也许这会改变你的看法?
无论如何,这与为自动变量分配存储空间的过程是否应该被描述为“分配”关系不大。尽管它具有技术含义,但从语言上讲,这种空间可以从堆栈中划分出来,而不是从进程控制的内存的其他区域中划分出来,这一点无关紧要。此类对象的生命周期确实遵循与mallocated 对象的生命周期不同的规则,但那又怎样呢?
例如,如果我有一个 C 程序,我只在堆栈上分配两个变量,那么说我分配了是正确的,还是说我只是重用了该空间更好?
无论哪种方式,人们都可能很好地理解你。尽管我确信有些人会质疑“分配”在技术上对于自动变量是否正确,但它仍然被广泛使用。如果您是在与人交谈,而不是编写区分很重要的技术文档,那么我会毫不犹豫地使用“分配”来描述为自动变量分配存储空间。
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |