在C语言中,内存分布主要可以分为以下几个区域:
栈(Stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。
堆(Heap):一般由程序员分配和释放,若未释放,程序结束时由操作系统回收。
全局区(静态区)(Static):存放全局变量、静态变量和常量。
文字常量区:存放常量字符串。程序结束后由系统释放。
程序代码区:存放程序的二进制代码。
下面是一个简单的例子,展示了这些区域的基本使用:
#include <stdio.h>
#include <stdlib.h>int globalVar = 1; // 全局变量
static int staticGlobalVar = 2; // 静态全局变量void stackAndHeap() {int localVar = 3; // 局部变量,存放在栈上int *heapVar = (int*)malloc(sizeof(int)); // 分配堆内存*heapVar = 4; // 存储在堆上printf("Local variable: %d\n", localVar);printf("Heap variable: %d\n", *heapVar);free(heapVar); // 释放堆内存
}int main() {stackAndHeap();// 注意:全局区和文字常量区内容在程序结束后由系统自动回收return 0;
}
在这个例子中,localVar 是一个局部变量,存放在栈上,函数调用结束后自动释放。heapVar 是通过动态分配在堆上的内存,需要手动释放避免内存泄露。globalVar 和 staticGlobalVar 是全局变量和静态变量,存放在全局区。字符串"Hello, World!"作为常量字符串存放在文字常量区。程序代码区存放程序的二进制代码。
内容仅供参考