上一篇 中,我们了解了指针变量的声明和初始化方式,以及指针变量的引用赋值方式。本篇文章中,我们初步分析不同的内存空间 ,并通过示例来了解动态内存的分配、使用和释放方式。
章节预览:
4. 首谈进程中的内存区域
5. 指针变量存储字符串常量
6. 如何动态分配内存空间
目录预览
章节内容:
4. 首谈进程中的内存区域
当程序执行时,程序将会以进程的形式存在虚拟内存中,系统会为我们的进程分配不同的内存空间。我们的进程就像一个大箱子,程序定义的对象放置在这个箱子中的某个区域中的某个位置。接下来,我们初次了解进程中的不同内存空间:
代码段:英文名称code segment / text segment,通常用来存放程序执行代码的内存区域。这部分区域的大小在程序加载时就已经确定,并且在大部分情况下内存区域通常属于只读状态(某些架构允许代码段为可写状态)。在代码段中,宏、函数存储在这个区域,也有可能存储一些常数量。另外,常数量的值不允许修改。
数据段:英文名称 data segment,通常存放程序中已初始化的全局变量的内存区域。数据段属于静态内存分配,其中包括全局变量、静态变量和常数量。关于全局变量和静态变量的内容,将在“函数”章节中讲述。
bss段:英文名称bss segment,通常用来存放程序中未初始化的全局变量的内存区域。bss属于静态内存分配,在程序执行之前bss段自动清零。
栈区:英文名称stack,通常用来存放程序中临时创建的局部变量的内存区域。栈属于动态内存储存区,栈的内存由函数执行期间申请,在函数执行结束后