我正在阅读这篇文章并看到:“本文假设您已经了解并至少基本了解了 GNU/Linux 系统中的内存映射是如何工作的,特别是在堆栈中静态分配的内存和在堆栈中动态分配的内存之间的区别堆。”
这让我很困惑,因为我认为堆栈和堆是动态分配的,这意味着仅在必要时才分配,而全局变量和在函数内部声明为“静态”的变量是静态分配的,即始终分配。
例如,如果我有
void f() {
int x = 1;
...
}
值 1 仅被放入堆栈,堆栈指针仅在函数 f() 被调用时才递增。同样,如果我有
void f() {
int x = malloc(1 * sizeof(int));
...
}
只有调用 f() 时才会分配该堆内存。但是,如果我有“int x = 1;” 在程序的全局部分或“static int x = 1;” 在函数体内,每当我运行这个程序时,该内存将在数据部分中分配,值为 1。
我错了吗?