首页天道酬勤c语言静态局部变量定义,静态局部变量存储在哪里

c语言静态局部变量定义,静态局部变量存储在哪里

张世龙 05-06 03:30 8次浏览

原文地址: https://www.cn blogs.com/Dylan Cao/p/9936957.html

先看几个概念:

1、bss是英文block started by symbol的简称,通常是用于存储程序中未初始化的全局变量的内存区域,程序加载时内核清除0。 bss段是静态内存分配。 初始值也由用户定义的连接位置文件确定,用户必须在可读写的ram区域内定义。 源程序中使用malloc分配的内存是此块,主要由程序中同时分配的最大内存量决定,而不是由data大小决定,但如果超出范围,即分配失败,则为

2、文本段是程序代码段,在at91库中表示程序段的大小。 这是编译器在编译连接时自动计算的。 当mndfj在链接定位器文件中将符号置于代码段之后时,该符号表示的值是代码段的大小,并且在编译连接时该符号表示的值将自动指定给源程序。

3、因为data包含静态初始化的数据,所以有初始值的全局变量和static变量在data区域。 段的起始位置也由合并位置文件确定,并且在编译合并时自动分配大小。 它与你的程序大小无关,但与程序使用的全局变量、常数的数量有关。

4、堆栈保存函数的局部变量和参数。 “last in first out,lifo”的数据结构。 也就是说,最后放置在堆栈中的数据是从堆栈中删除的第一个数据。 对于哪些临时存储的信息以及不需要长时间存储的信息,像lifo这样的数据结构非常理想。 调用函数或过程时,通常会清除存储在堆栈中的局部变量、函数调用信息和其他信息。 堆栈的另一个重要特征是地址空间“向下减少”。 也就是说,存储在堆栈中的数据越多,堆栈的地址就越低。 堆栈的顶部位于可读写ram区域的最后。

5、heap保存函数内部的动态分配存储器是用于保存程序信息的另一种数据结构,更准确地说是保存程序的动态变量。 堆是“fifo”数据结构。 您可以仅将数据插入堆的一端,并将数据移动到另一端。 堆的地址空间“向上增加”。 也就是说,存储在堆中的数据越多,堆的地址越高。

遇到的问题:

我以前记得这些,但今天遇到实际问题的时候,我发现不是那样的。 全局变量可以包含在text段中吗?

嗯,是的其实,我今天遇到了这种情况。 此配置的空间实际上可以在link文件中修改。 如果我的link文件是这样的:

其实,在这种情况下,如果我定义了const型全局变量,该全局变量位于text段。 算出来的东西,好像还是要理解原理啊。 但是,这也是一个反复的过程,有没有人能不经过磨难迅速成长?

java堆栈方法区图解,静态方法在内存中的什么地方