当前位置:首页 > 操作系统 > Linux

Linux内存段的分析

    Linux 应用程序的内存分配中,是用 segment(段)进行区别的,使用 size 命令进行查看:

        
size a.out 
   text       data        bss        dec        hex    filename
   163926481911777    a.out

    可见,数据是分配 text 段,data 段,bss 段,这里使用size 命令的查看只能是看到这三个段的大小(编译的阶段就可以确定下来)而,堆、栈则是在运行的时候动态去分配空间的。

一、Linux 段的分配

text:代码段,存储代码、常量、字符串等只读的数据

data: 数据段,保存的是有经过初始化的全局变量和静态变量的部分。这里的初始化,初始化的值必须不能为零

bss: bss 段,保存的是没有经过初始化的全局变量、静态变量和初始化的值为零的全局变量和静态变量。

堆(heap): 用于动态内存的分配额哦,程序猿手动调用 malloc 进行分配和释放。

栈(stack):存放局部变量和函数的参数等。

二、大小的比对

计算 size a.out 的大小

原始的大小;

        
                int
                 main()
{
        printf(
                "
                hellow worldn
                "
                );
}
   text       data        bss        dec        hex    filename
   
                1132
                256
                8
                1396
                574    a.out
        

 

1、局部变量是存储在栈中:

        

 

                int
                 main()
{
        
                int
                 a;
        printf(
                "
                hellow worldn
                "
                );
}
~ 
   text       data        bss        dec        hex    filename
   113225681396574    a.out
        

 

2、局部变量(局部数组)也是存储在栈中:

        
                int
                 main()
{
        
                int
                 a;
        
                int b[100];
        printf("hellow worldn");
}
   text       data        bss        dec        hex    filename
   113225681396574    a.out
        

 

3、字符串(常量是存储在text中)

        
                int
                 main()
{
        
                int
                 a;
        
                int b[100] = L"qxj511";
        printf("hellow worldn");
}
   text       data        bss        dec        hex    filename
   163925681903        76f    a.out
        

 

4、没有经过初始化的静态变量是存储在 BSS 段中:

        

 

                int
                 main()
{
        
                int
                 a;
        
                int b[100] = L"qxj511";
        static c;
        printf("hellow worldn");
}
   text       data        bss        dec        hex    filename
   1639256121907773    a.out
        

 

5、经过初始化的静态变量是存储在 data 段中:

        
                int
                 main()
{
        
                int
                 a;
        
                int b[100] = L"qxj511";
        static c = 1;
        printf("hellow worldn");
}
   text       data        bss        dec        hex    filename
   163926081907773    a.out
        

 

6、没有经过初始化的全部变量存储在 bss 端中:

        
                int
                 d;

                int
                 main()
{
        
                int
                 a;
        
                int b[100] = L"qxj511";
        static c = 1;
        printf("hellow worldn");
}
   text       data        bss        dec        hex    filename
   1639260121911777    a.out
        

 

7、经过初始化的全局变量存储在 data 段中:

        
                int d = 1;
int main()
{
        int a;
        int b[100] = L"qxj511";
        static c = 1;
        printf("hellow worldn");
}
   text       data        bss        dec        hex    filename
   163926481911777    a.out
        

原文:http://www.cnblogs.com/qxj511/p/5084103.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐