栈区 |
---|
堆栈增长区 |
堆区 |
其他段 |
.bss段 |
.data段 |
.text段 |
不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。.data .bss与程序同生共死。
1、文件内全局
exterm全局变量 若无初始化存 .bss段 若有初始化存 .data段 。
static静态全局变量存位置同上,区别在于只在static所定义文件内使用有效。
2、文件内局部
普通局部变量 存 栈 ,多次调用时存放不同栈,也可动态分配 存 堆 用完需释放堆!
static静态局部变量 存 .data ; 只作用域有效,其他函数/源文件不可访问;若未初始化编译器自动赋值0,每次 调用静态局部变量都是上次调用后的值!
3、文件内static函数
尽管另一个.c文件include 含static函数定义.h文件 仍就看不到该static函数
bss段:(Block Started by Symbol)bss segment 静态内存分配 data段:data segment 静态内存分配 代码段(text段): 代码段(code segment/text segment)只读,含字符串常量 堆(heap):由程序员分配释放(UNIX/LINUX系统),存放运行中被动态分配的内存段,大小不固定,可动态扩张或缩减 栈(stack):自动分配释放,栈又称堆栈,先进先出机制,存放程序的局部变量,调用函数时,通过栈传递参数和返回值等。