在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!"作为常量字符串存放在文字常量区。程序代码区存放程序的二进制代码。
内容仅供参考
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |