• 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();

    • 栈空间:运行时,函数内部使用的的变量,函数一旦返回,就释放,生存周期是函数内。
    • 只读空间:静态空间,整个程序结束时释放内存,生存周期最长。
  • 相关阅读:
    JMM、asifserial语义、happensbefore模型
    jvm内存溢出实践
    垃圾回收和GC算法
    jvm运行时数据区域
    实现加锁的消费者和生产者模型
    jvm监控工具小结
    HotSpot对象
    java常用垃圾收集器
    字面量, 符号引用与直接引用
    常用线程安全的队列
  • 原文地址:https://www.cnblogs.com/BANLOONG/p/10466987.html
Copyright © 2020-2023  润新知