gpt4 book ai didi

c - 对于每个静态和全局(未初始化/初始化变量),数据段的内存分配未正确发生

转载 作者:行者123 更新时间:2023-11-30 16:23:09 27 4
gpt4 key购买 nike

我试图了解内存分配如何适用于执行或编译的任何 C 代码。

我编写了以下 5 个独立的小代码,它们将帮助我理解内存分配过程。

  1. segment_size1.c

    int main(){
    printf("hellow world");
    return 0;
    }
  2. segment_size2.c

    //Adding uninitialized static int variable This would increase the size of BSS by 4 bytes.
    int main()
    {
    static int mystatic;
    printf("Hellow world");
    return 0;
    }
  3. segment_size3.c

    // Adding initialized static int variable, this would increase the size of initialized data
    // segment by 4 bytes.

    int main()
    {
    static int mystatic;
    static int mystatic1 = 100;
    printf("Hellow world");
    return 0;
    }
  4. segment_size4.c

    // Adding un-initialized global int variable, this would increase the size of BSS segment by 4 bytes.

    int myglobal;
    int main()
    {
    static int mystatic;
    static int mystatic1 = 100;
    printf("Hellow world");
    return 0;
    }
  5. segment_size5.c

    // Adding initialized global int variable, this would increase the size of data segment by 4 bytes.

    int myglobal;
    int myglobal2 = 500;
    int main()
    {
    static int mystatic;
    static int mystatic1 = 100;
    printf("Hellow world");
    return 0;
    }

根据我的理解,如果我们编译上述文件,那么在编译segment_size2.c之后,BSS大小应该增加4个字节,在编译segment_size3.c之后,数据大小应该增加4个字节。但是当我点击 size 命令时,我得到了以下结果,

    size segment_size1 segment_size2 segment_size3 segment_size4 segment_size5
text data bss dec hex filename
1217 560 8 1785 6f9 segment_size1
1217 560 8 1785 6f9 segment_size2
1217 564 12 1793 701 segment_size3
1217 564 12 1793 701 segment_size4
1217 568 16 1801 709 segment_size5

这里我们可以清楚地看到,编译segment_size3后,bss和data段同时更新。这怎么可能?

最佳答案

We can clearly see that bss and data segment is simultaneously getting updated

这是保存初始值 != 0 的位置与静态/全局变量的保存位置之间的区别

main执行之前,初始值!=0被复制到全局/静态变量中,初始值为0的全局/静态变量当然也被设置为0

关于c - 对于每个静态和全局(未初始化/初始化变量),数据段的内存分配未正确发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54107602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com