C语言内存分配:指针、变量和函数调用
在函数 foo 中,指针变量 x 被声明为 char 类型指针,因此它在栈上占用 2 个字节(在大多数机器上)。变量 y 被声明为 char 类型,因此它在栈上占用 1 个字节。在主函数中,变量 z 被声明为 char 类型,因此它被放置在静态内存中,占用 1 个字节。
以下是代码分析:
char foo() {
char *x, y;
x = 0x20;
y = *x;
return y;
}
char z;
int main(void) {
z = foo();
...
}
内存分配解释:
x: 指针变量x在函数foo的栈帧上分配了 2 个字节,用于存储指向char类型的内存地址。y: 变量y是一个char类型变量,在函数foo的栈帧上分配了 1 个字节,用于存储char类型的值。z: 变量z是一个char类型变量,在程序启动时就分配了 1 个字节的静态内存空间,用于存储char类型的值。
总结:
在 C 语言中,指针变量存储的是内存地址,而普通变量存储的是实际值。函数调用时会创建一个栈帧,用于存储函数内部的局部变量。全局变量则在程序启动时分配静态内存。理解内存分配对于编写高效安全的 C 代码至关重要。
原文地址: https://www.cveoy.top/t/topic/jpBz 著作权归作者所有。请勿转载和采集!