标签:
Linux 应用程序的内存分配中,是用 segment(段)进行区别的,使用 size 命令进行查看:
size a.out text data bss dec hex filename 1639 264 8 1911 777 a.out
可见,数据是分配 text 段,data 段,bss 段,这里使用size 命令的查看只能是看到这三个段的大小(编译的阶段就可以确定下来)而,堆、栈则是在运行的时候动态去分配空间的。
text:代码段,存储代码、常量、字符串等只读的数据
data: 数据段,保存的是有经过初始化的全局变量和静态变量的部分。这里的初始化,初始化的值必须不能为零
bss: bss 段,保存的是没有经过初始化的全局变量、静态变量和初始化的值为零的全局变量和静态变量。
堆(heap): 用于动态内存的分配额哦,程序猿手动调用 malloc 进行分配和释放。
栈(stack):存放局部变量和函数的参数等。
计算 size a.out 的大小
原始的大小;
int main() { printf("hellow world\n"); } text data bss dec hex filename 1132 256 8 1396 574 a.out
int main() { int a; printf("hellow world\n"); } ~ text data bss dec hex filename 1132 256 8 1396 574 a.out
int main() { int a; int b[100]; printf("hellow world\n"); } text data bss dec hex filename 1132 256 8 1396 574 a.out
int main() { int a; int b[100] = L"qxj511"; printf("hellow world\n"); } text data bss dec hex filename 1639 256 8 1903 76f a.out
int main() { int a; int b[100] = L"qxj511"; static c; printf("hellow world\n"); } text data bss dec hex filename 1639 256 12 1907 773 a.out
int main() { int a; int b[100] = L"qxj511"; static c = 1; printf("hellow world\n"); } text data bss dec hex filename 1639 260 8 1907 773 a.out
int d; int main() { int a; int b[100] = L"qxj511"; static c = 1; printf("hellow world\n"); } text data bss dec hex filename 1639 260 12 1911 777 a.out
int d = 1; int main() { int a; int b[100] = L"qxj511"; static c = 1; printf("hellow world\n"); } text data bss dec hex filename 1639 264 8 1911 777 a.out
标签:
原文地址:http://www.cnblogs.com/qxj511/p/5084103.html