1. 常用数据结构及其应用场景:
https://www.jianshu.com/p/ec17d738327f
2. 代码可执行文件的内存占用:【https://blog.csdn.net/u012942555/article/details/48876447】
首先要来理解一下可执行文件加载进内存后形成的进程在内存中的结构,如下图:
具体一些,函数内部定义的变量,在函数执行完毕后,就会出栈。
代码区:存放CPU执行的机器指令,代码区是可共享,并且是只读的。
数据区:存放已初始化的全局变量、静态变量(全局和局部)、常量数据。
BBS区:存放的是未初始化的全局变量和静态变量。
栈区:由编译器自动分配释放,存放函数的参数值、返回值和局部变量,在程序运行过程中实时分配和释放,栈区由操作系统自动管理,无须程序员手动管理。
堆区:堆是由malloc()函数分配的内存块,使用free()函数来释放内存,堆的申请释放工作由程序员控制,容易产生内存泄漏。
3. 数据结构堆栈 与我们申明变量,电脑的堆栈的关系?
https://www.cnblogs.com/ricklz/p/9044858.html
首先,存储器与寄存器的关系:内存如同一个仓库,堆栈是仓库中开辟的一个规则有序的后进先出的仓库区,而寄存器就是生产线上的一个容器。堆栈是属于内存区的一部分,而寄存器则是CPU中的一部分。同时想让数据存储在寄存器区,需要在前面加关键词 regist。
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
4.变量内存分配方式及堆栈的关系
https://blog.csdn.net/qq_41291253/article/details/79509626
5. 全局变量与静态变量的关系:
https://blog.csdn.net/u012149181/article/details/83421563
简单来说,static用在函数内部,那么这个变量在程序运行完成后,也不会消失。其存储位置不在栈区了,而是数据区(也叫静态区,全局区)。全局变量global存储的位置也是一样。若程序由一个源文件构成时,全局变量与全局静态变量没有区别。
那么有什么区别呢?
若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享, 即:全局静态变量对组成该程序的其它源文件是无效的。
这样有什么好处呢?
(1)不必担心其它源文件使用相同变量名,彼此相互独立。
(2)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。
这样的话,用static就可以保护当前文件的全局变量不被修改。
怎么会存在修改的问题呢?因为全局变量,我们可以在另一个文件夹用extern来引用,这样的话,会引起源文件的改变。用static就避免了这个问题。