【C 语言】从代码示例入手(二十二)指针之内存四区

 《C 语言从代码示例入手》系列文章将带你开启 C 语言编程的探索之旅。通过大量简单且实用的代码示例,由浅入深地展现 C 语言的核心知识点,包括变量、数据类型、运算符、控制结构、函数等。每一个代码示例都有详细的解释和注释,让你能轻松理解代码的功能和运行原理,助你逐步掌握 C 语言的编程技巧,快速提升编程能力,为后续深入学习和开发打下坚实基础。

关于C语言的运行环境安装配置,请参看:【C 语言】从代码示例入手(零)

目录

一、指针之内存四区

1、内存四区模型

2、内存四区详解

二、内存中的执行过程

 1、代码执行的三个阶段

2、代码执行的三个阶段详解

 三、【内存四区】之【全局区】

 1、运行界面

2、函数源码

3、代码说明

4、运行结果

 四、【内存四区】之【栈区】

 1、运行界面

2、函数源码

3、代码说明

4、运行结果

 五、【内存四区】之【堆区】

 1、运行界面

2、函数源码

3、代码说明

4、运行结果


一、指针之内存四区

1、内存四区模型

在 C 和 C++ 等编程语言中,字符串一级指针涉及的内存四区通常是指代码区、全局数据区(静态区)、栈区和堆区,如下图所示:

2、内存四区详解

  • 代码区
    • 存储内容:存放函数体的二进制代码,由操作系统在程序运行时将可执行文件中的代码加载到该区域。例如,对于一个包含main函数的 C 程序,main函数以及其他自定义函数的代码都存放在代码区。
    • 特点:代码区是只读的,防止程序在运行过程中意外修改代码而导致程序逻辑错误。并且代码区是共享的,多个进程可以共享同一份代码,以节省内存空间。
  • 全局数据区(静态区)
    • 存储内容:用于存储全局变量和静态变量。未初始化的全局变量和静态变量会被自动初始化为 0 或空指针。例如,int global_var;这样的全局变量,如果在定义时没有赋初值,就会在全局数据区被初始化为 0。
    • 特点:该区域的数据在程序运行期间一直存在,直到程序结束才会被释放。其内存空间是在程序编译时就确定的。
  • 栈区
    • 存储内容:由编译器自动分配和释放,主要用于存放函数的参数值、局部变量等。当函数被调用时,其参数和局部变量会被压入栈中,函数执行结束后,这些数据会被弹出栈。例如,在函数void func(int a)中,参数a和函数内定义的局部变量都会存储在栈区。
    • 特点:栈的操作遵循后进先出(LIFO)原则,具有较高的访问速度。但栈的空间有限,通常较小,如果函数中定义的局部变量过多或递归调用层次过深,可能会导致栈溢出。
  • 堆区
    • 存储内容:用于动态内存分配,程序员可以通过mallocnew等操作符在堆区申请内存空间,用于存储动态创建的数据结构,如字符串、数组、对象等。例如,char* str = (char*)malloc(100 * sizeof(char));就是在堆区分配了 100 个字符大小的空间来存储字符串。
    • 特点:堆区的内存空间相对较大,且可以根据程序的需要动态分配和释放。但堆的分配和释放需要程序员手动管理,如果分配后忘记释放,会导致内存泄漏;如果释放后继续使用,会导致悬空指针等问题。 

二、内存中的执行过程

 1、代码执行的三个阶段

在 C 语言程序的执行过程中分为三个阶段,如下图所示:

2、代码执行的三个阶段详解

在 C 语言程序的执行过程中分为三个阶段:
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超越超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值