【C/C++】C语言中的内存分布

打印 上一主题 下一主题

主题 945|帖子 945|积分 2835

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

   内容仅供参考
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表