0

0

c/c++中内存空间区域划分划分

爱谁谁

爱谁谁

发布时间:2025-05-06 20:36:01

|

490人浏览过

|

来源于php中文网

原创

让我们逐一分析代码中的变量和数据,确定它们在内存中的位置:

#include
#include

int GlobalVar = 1; // 数据段(静态区) static int StaticglobalVar1 = 1; // 数据段(静态区)

int main() { static int staticglobalVar2 = 1; // 数据段(静态区) int partVar; // 栈区 char arr[] = "abcdef"; // 栈区 int str1 = (int)malloc(sizeof(int) 5); // 堆区 int str2 = (int)malloc(sizeof(int) 5); // 堆区

if (str1 == NULL || str2 == NULL) {
    perror("malloc()");
    return 1;
}

free(str1); // 释放堆区内存
free(str2); // 释放堆区内存
str2 = NULL; // 栈区(指针本身)
str1 = NULL; // 栈区(指针本身)

return 0;

}

现在,让我们详细解释每个变量和数据在内存中的位置:

  1. GlobalVar

    • 类型:全局变量
    • 位置:数据段(静态区)
    • 原因:全局变量在程序开始时初始化并存放在数据段,直到程序结束才被释放。
  2. StaticglobalVar1

    • 类型:静态全局变量
    • 位置:数据段(静态区)
    • 原因:静态全局变量与普通全局变量类似,存放在数据段,生命周期贯穿整个程序运行期间。
  3. staticglobalVar2

    立即学习C++免费学习笔记(深入)”;

    • 类型:静态局部变量
    • 位置:数据段(静态区)
    • 原因:静态局部变量在程序开始时初始化并存放在数据段,生命周期也贯穿整个程序运行期间。
  4. partVar

    • 类型:局部变量
    • 位置:栈区
    • 原因:局部变量在函数调用时分配在栈区,函数结束时自动释放。
  5. arr

    TeemIp - IPAM and DDI solution
    TeemIp - IPAM and DDI solution

    TeemIp是一个免费、开源、基于WEB的IP地址管理(IPAM)工具,提供全面的IP管理功能。它允许您管理IPv4、IPv6和DNS空间:跟踪用户请求,发现和分配IP,管理您的IP计划、子网空间、区域和DNS记录,符合最佳的DDI实践。同时,TeemIp的配置管理数据库(CMDB)允许您管理您的IT库存并将您的配置项(CIs)与它们使用的IP关联起来。项目源代码位于https://github.com/TeemIP

    下载
    • 类型:局部数组
    • 位置:栈区
    • 原因:局部数组在函数调用时分配在栈区,函数结束时自动释放。
  6. str1

    • 类型:动态分配的内存指针
    • 位置:堆区(指向的内存),栈区(指针本身)
    • 原因:malloc函数在堆区分配内存,str1本身是一个指针,存放在栈区。
  7. str2

    • 类型:动态分配的内存指针
    • 位置:堆区(指向的内存),栈区(指针本身)
    • 原因:与str1相同,malloc在堆区分配内存,str2本身存放在栈区。
  8. 字符串常量 "abcdef"

    • 类型:字符串常量
    • 位置:数据段(静态区)
    • 原因:字符串常量在编译时被存放在数据段。
  9. 代码段

    • 位置:代码段
    • 原因:包含main函数的二进制代码。

总结:

  • 数据段(静态区)GlobalVar, StaticglobalVar1, staticglobalVar2, 字符串常量 "abcdef"
  • 栈区partVar, arr, str1(指针本身), str2(指针本身)
  • 堆区str1(指向的内存), str2(指向的内存)
  • 代码段main函数的二进制代码

c/c++中内存空间区域划分划分

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

字符串常量的表示方法
字符串常量的表示方法

字符串常量的表示方法:1、使用引号;2、转义字符;3、多行字符串;4、原始字符串;5、字符串连接;6、字符串字面量和对象;7、编码问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

139

2023.12.26

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

77

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

257

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

619

2023.11.24

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.6万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号