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

    • 栈空间:运行时,函数内部使用的的变量,函数一旦返回,就释放,生存周期是函数内。
    • 只读空间:静态空间,整个程序结束时释放内存,生存周期最长。
  • 相关阅读:
    JUC并发工具包之Semaphore
    Linux命令
    uWSGI
    数据库 MySQL 练习
    c++
    c++ 初阶
    Git
    MySQl 和 Redis
    MySQL 查询
    MySQL 命令
  • 原文地址:https://www.cnblogs.com/BANLOONG/p/10466987.html
Copyright © 2011-2022 走看看