zoukankan      html  css  js  c++  java
  • Linux学习---内存分布基础


     内核空间 应用程序不允许访问

    -----------------------------------------3G

     栈空间 局部变量 RW

    -----------------------------------------

     运行时的堆空间  malloc

    -----------------------------------------

     全局的数据空间(初始化的,未初始化)static RW data(数据段) 、bss(未初始化的数据段)

     只读数据段 (“Hello  world”) R text(代码段)

     代码段(code) R text //通过指针修改代码段会出现段错误❶(Segmentation fault)。

    -----------------------------------------

     0x0:

     

     

    注❶: //通过指针修改代码段报段错误,代码段只允许访问,但不可修改。

    in只读main (){

    unsigned char *p;
    printf("%p ",main); //00000000004017E2
    p = (unsigned char *)main;
    printf("%x ",p[0]); //e8
    p[0] = 0x12;
    printf("+++++%x ",p[0]); //Segmentation fault
    return 0;

    • 堆空间:运行时,可以自由分配,自我管理的分配和释放内存空间,生存周期有程序员决定。

    创建:malloc()一旦成功返回,返回分配好的地址给我们,只需要接收。对于这个新地址的读法,由程序员灵活把握,输入参数指定分配的大小,单位为B。

    char *p;

    p = (char *)malloc(100) ;

    if(p == NULL) {

    error;

    }

     释放:free();

    • 栈空间:运行时,函数内部使用的的变量,函数一旦返回,就释放,生存周期是函数内。
    • 只读空间:静态空间,整个程序结束时释放内存,生存周期最长。
  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/BANLOONG/p/10466987.html
Copyright © 2011-2022 走看看