C语言数据在内存中的存储超详解
在C语言中,数据在内存中的存储方式有以下几种:
- 栈(Stack):存储局部变量、函数参数、返回地址等。栈是向下增长的。
- 堆(Heap):动态分配内存,使用malloc、calloc、realloc等函数分配。堆可以向上增长或向下增长。
- 全局/静态存储区:存储全局变量和静态变量。
- 常量存储区:存储常量字符串,程序结束后由系统释放。
- 代码区:存储程序的代码。
以下是一个示例代码,用于说明数据在内存中的存储方式:
#include <stdio.h>
#include <stdlib.h>
int global_var = 1; // 全局变量
static int static_var = 2; // 静态变量
void stack_and_heap() {
int local_var = 3; // 局部变量,存储在栈上
int *heap_var = (int *)malloc(sizeof(int)); // 动态分配内存
*heap_var = 4; // 动态分配的内存区域
printf("local_var: %p\n", &local_var);
printf("heap_var: %p\n", heap_var);
printf("global_var: %p\n", &global_var);
printf("static_var: %p\n", &static_var);
free(heap_var); // 释放动态分配的内存
}
int main() {
stack_and_heap();
printf("After stack_and_heap function call:\n");
printf("global_var: %p\n", &global_var);
printf("static_var: %p\n", &static_var);
return 0;
}
这段代码会输出变量在内存中的地址,你可以通过这些输出结果来观察数据在内存中的分布情况。
评论已关闭