C中静态存储区和动态存储区

xiaoxiao2021-02-28  124

c语言中需要内存来存放数据。而内存主要分为两类:静态存储区和动态存储区。

1、静态存储区

(1)分为数据区(只读数据区(代码区?在linux中又叫文本段.text)、读写数据区.data)、未初始化区(BSS)。

(2)它们都是在程序编译连接阶段确定的。

2、动态存储区

(1)分为堆和栈。

(2)程序执行过程中动态分配,大小也随之动态变化。

(3)从内存管理的实现的角度看来,堆使用链表实现,而栈使用的是线性存储的方法。

补:

(1)关于栈

栈:栈是先进后出,实际的操作中,栈内存可以有满栈和空栈的情况。

满栈的情况下,栈指针当前的位子是已经使用的的栈区域;空栈的情况是,栈指针当前的位子是没有使用的栈区域。

满栈时:入栈,是先移动指针,再放入数据;出栈则是先出数据,再移动指针;

空栈时:入栈,是先放入数据,再移动指针;出栈则是先移动指针,再出数据;

(2)关于全局变量和局部变量的存储

a、全局变量只会存在于数据区或者BSS区。如果初始化(为非0),则存储在数据区,否则(初始化为0或者不初始化)存储在BSS区。

b、局部变量分为普通(auto)局部变量、静态局部变量。

前者存储在栈中,如果没有初始化则为随机值;后者存储在数据区(初始化为非0)或BSS区(初始化为0或者不初始化)。

3、存储类、生命周期,作用域、链接属性

(1)存储类表明变量在哪里存储,生命周期表明什么时候为变量分配、收回内存,作用域表明变量起作用的范围(代码块,函数域,文件域);

(2)存储类决定了生命周期,作用域决定了链接属性。

(3)上面1,2中是存储类的知识点;

(4)作用域表明变量起作用的范围(代码块,函数域,文件域);

(5)链接属性有外链接、内链接、空链接(不参与链接)。

转载请注明原文地址: https://www.6miu.com/read-31136.html

最新回复(0)