bss段

(转载)堆栈、BSS段、代码段、数据段、RO、RW、ZI等概念区分

两盒软妹~` 提交于 2019-12-01 12:10:52
最前言 如有任何表述不对的地方,欢迎及时指正。 技术小白,主要写个博客帮助自己总结和梳理知识,基本上都是拷贝的别人家的文字,根据自己的理解和逻辑重新梳理顺序的。 一 预备知识 在区分一个程序的堆栈、bss、text段、RO、RW、ZI等概念时,首先区分一下程序进程和程序文件,然后了解一下哈弗结构和冯诺依曼结构。 程序进程就是程序运行时的程序,程序文件是编译后生成的可执行文件,比如.bin文件等,这两个概念很好区分,特别强调一下,分开表达主要是怕读者在阅读过程中混淆了。 哈佛结构和冯诺依曼结构的主要区别就是处理器能不能实现取指令和取数据的并发进行。嵌入式芯片中主要是哈佛结构,PC机上是冯诺依曼结构。 经典的哈佛结构 : 程序存储器和数据存储器是各自独立的存储器。处理器应该有两套总线,一套是程序存储器的数据和地址总线,一套是数据存储器的数据和地址总线。取指令和取数据能并发进行。51的程序进程的逻辑代码段放在ROM中,而变量部分则放在RAM中,取ROM中的指令和RAM中的变量是两套总线。 改进型哈佛结构 : 程序存储器和数据存储器是各自独立的存储器。处理器只有一套总线,分时访问程序存储器和数据存储器,但是在处理器中有icache和dcache将程序和数据分开,所以处理器仍然可以并步执行取指令和取数据。从ARM9开始以后所有的ARM处理器内核都是改进型的哈佛结构

stm32内存知识点(转)

只愿长相守 提交于 2019-11-26 16:43:24
1.bss段,data段、text段、堆(heap)和栈(stack) bss段:   bss段(bss segment)通常是指用来存放 程序中未初始化的全局变量 的一块内存区域。   bss是英文Block Started by Symbol的简称。   bss段属于静态内存分配。 data段:   数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。   数据段属于静态内存分配。 text段:   代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。   这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。   在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。 堆(heap):   堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。   当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);   当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。 栈(stack):    栈又称堆栈,是 用户存放程序临时创建的局部变量,   也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。