zoukankan      html  css  js  c++  java
  • linux下的内存分布

    周日讲了32位linux下的内存分布

    还有关于C语言中的extern和static的用法

    内存的最高1G是用作系统保留,接下来是占空间,在靠近3G的那一块

    再下来是堆空间,之后是bss区,未初始化的静态变量区

    然后是Rw data区

    Ro data区,主要用作存储字符串类型

    接下来是代码段,又名txt正文段

    0xffffffff

    内核 

    0xbfff ffff

    bss区

    rw data
    ro data

    代码段 

    0x00000000

    接下来就是验证

     1 #include <stdio.h>
     2 
     3 static int sg_init = 10;
     4 static int sg_uninit ;
     5 
     6 
     7 int main()
     8 {
     9 
    10     int l_init = 10;
    11     static int init_stack = 10;
    12     static int uninit_stack;
    13     static int uninit_xxx = 0;
    14     
    15     printf("sg_init            %p
    ",&sg_init);
    16     printf("sg_uninit          %p
    ",&sg_uninit);
    17     printf("l_init             %p
    ",&l_init);
    18     printf("init_stack         %p
    ",&init_stack);
    19     printf("uninit_stack       %p
    ",&uninit_stack);
    20     printf("string,ro data     %p
    ","hello");
    21     printf("function           %p
    ",main);
    22 
    23 }
    View Code

    运行结果如下

    sg_init                 0x804a014
    sg_uninit             0x804a024
    l_init                   0xbfa0718c
    init_stack            0x804a018
    uninit_stack        0x804a028
    string,ro data      0x80485da
    function              0x80483e4

    可见局部变量是存放在栈空间的,因为比较靠近堆空间0xbf

    未初始化的静态全局变量和静态局部变量是紧挨着的,而且比初始化的位置要高一些,所以验证了上述模型

    rodata段爷比rwdata段要低一些,说明静态区的模型也是正确的

    同理代码段的地址也是符合上述模型。

    有个不太严谨的证明是局部变量栈空间,如何排除它不是在堆空间?栈空间有多大?

    我这里还没搞明白。

  • 相关阅读:
    nice -n 10 bash 和 chrt 10 bash 和 echo -17 > /proc/PID/oom_score_adj
    使用NGINX+LUA实现WAF功能 和nginx 防盗链
    hdfs 通过命令坏块监测和删除或者地址获取参数做监控
    kafka 的server.properties
    ntpd服务
    kafka笔记博客
    k8s高可用
    K8S集群Master高可用实践
    String:字符串常量池
    如何设计出优秀的Restful API?
  • 原文地址:https://www.cnblogs.com/wangzefeng/p/5407556.html
Copyright © 2011-2022 走看看