text:代码区,可执行二进制文件
Data:数据区,存放全局已初始化数据,静态变量字符串常量
Bss:存放的是全局未初始化变量,静态未初始化变量
堆区 heap 用于动态内存的分配,比栈区大很多
栈区:stack 加载函数的参数,返回值局部变量等,用的时候开辟,不用的时候就不开辟
Bss 和Data是生命周期是整个程序执行时间,属于数据区,合在一起称为全局静态区
栈区的结构:如同水杯,一段开,一段闭,可以压栈和出栈,栈是先进后出,
如:
def a():
a= 1
print(a)
b()
return a
def b():
b= 2
print(b)
c()
return b
def c():
c= 3
print(c)
return c
a() 调用a()函数,注意函数执行顺序
函数执行时,出现断点,压栈
在代码中怎么看内存四区图:
vim bb.c
# include<stdio.h>
int main() {
printf(‘hello world!’\n);
return 0;
} c程序中的主函数,程序入口,{}里面是函数体
再编译: gcc bb.c -o b # -o 指定编译后的文件名
b就是可以执行的二进制文件
执行 ./b
cat bb.c 查看写的程序文件
改完程序文件,需要重新编译 gcc bb.c -o dd
file b 查看二进制文件基本信息
size b
text 1185 代码区
data 552 静态区、全局已初始化数据区
bss 8 未初始化数据
dec 1745 十进制总和
hex 6d1 十六进制总和
filename b 可执行二进制文件名
只能看二进制文件