日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux--内存结构

發布時間:2025/7/14 linux 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux--内存结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先看一串代碼

#include <stdio.h> #include <stdlib.h>void main(){int *p1 = (int *)malloc(4);int *p2 = (int *)malloc(4);int *p3 = (int *)malloc(4);int *p4 = (int *)malloc(4);printf("p1 = %p\n",p1);printf("p2 = %p\n",p2);printf("p3 = %p\n",p3);printf("p4 = %p\n",p4); }

可見每次開辟的空間之間間隔16字節(p2-p1等于16字節),而每次開辟的空間明明只有4字節,多余的12字節從何而來?

原因在于,malloc開辟的內存空間位于堆,堆是由鏈表維護的,鏈表的每個結點(結構體)由兩部分組成:“數據部分”、“控制部分”。所以對于上面的情況多余的12字節來自于控制部分,并與內存對齊有關。控制部分主要包括上一個結點的地址、下一個結點的地址、當前結點的空間大小等。

在Linux系統中,運行著一個進程,會在"/proc/進程ID"下保存進程運行時所有的信息,進程結束時該文件夾會自動刪除。



Linux的內存結構可以分為以下幾個部分。

代碼段、數據段、BSS段、堆、棧


對于一個空的main函數:

#include <stdio.h> #include <stdlib.h>void main(){}
通過size命令查看可執行文件,可以查看代碼段、數據段、BSS段的數據的情況


現在在代碼中插入一個局部常量

#include <stdio.h> #include <stdlib.h> void main(){ const int a = 3; }


沒有變化,因為局部常量位于局部棧中。

在代碼中插入一個全局常量

#include <stdio.h> #include <stdlib.h>const int b = 3; void main(){ }

代碼段增加了4個字節變成1037,所以全局常量位于代碼段。


#include <stdio.h> #include <stdlib.h>int a=1; static b=2; const int c = 3;void fun(){ }void main(){int a1 = 1;static int b1 = 2;const int c1 = 3;printf("a = %p\n",&a);printf("b = %p\n",&b);printf("c = %p\n",&c);printf("a1 = %p\n",&a1);printf("b1 = %p\n",&b1);printf("c1 = %p\n",&c1);printf("fun = %p\n",fun);printf("main = %p\n",main); }

查看/proc目錄下進程中的maps文件



總結:

代碼區:存放的CPU的機器指令、全局常量、字符串常量。

數據段:存儲初始化的全局變量、靜態變量。

BSS段:未初始化的全局變量、靜態變量。

堆:動態開辟的內存空間。低地址向高地址擴展

棧:局部變量、局部常量。高地址向低地址擴展


malloc與new的區別:

new的實現是利用malloc,但是在malloc后會初始化空間。

如果是基本數據類型,直接初始化為默認值

如果是UDT,調用對應的構造函數進行初始化


與內存分配有關的函數:

(1)malloc:

(2)void ?* calloc(int count , int size):count為元素個數,size為每個元素的大小。分配count*size字節的空間,并初始化。

(3)alloca:原型類似malloc,但在棧中分配空間、

(4)void * realloc(void * ptr , int new_size): 修改已經配置好的內存空間大小,ptr為待修改的空間地址,new_size為新的內存大小。?

若內存減少:則直接返回ptr,內存空間大小變為new_size

若內存增加:若后續空間足夠,則返回ptr,內存空間變為new_size。若后續空間不足,則尋找第一個能夠滿足條件的空間,并將數據拷貝到新內存空間,返回新空間地址。

注:ptr = realloc(ptr , new_size)是不對的,如果分配失敗,ptr變為NULL,則原空間不能訪問。

轉載于:https://www.cnblogs.com/xiaogua918/p/4181547.html

總結

以上是生活随笔為你收集整理的Linux--内存结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品h | 国产欧美久久久久 | 欧美老熟妇一区二区三区 | 波多野结衣精品 | 公侵犯人妻中文字慕一区二区 | 香蕉视频亚洲 | 国产精品国产三级国产普通话对白 | 国产伦精品一区二区. | 草民午夜理伦三级 | 国产精品一区二区三 | 精品99在线 | 欧美黄色网络 | 亚洲视频国产 | 国产一区二区99 | 欧美激情在线免费观看 | 老司机伊人 | 熟妇高潮一区二区三区在线播放 | 91看片免费 | 亚洲成人一区在线观看 | 国产玖玖在线 | 欧美色图亚洲自拍 | 国产区免费 | 好av| 国产一级免费在线观看 | www国产精品 | 亚洲激情三区 | 麻豆91精品91久久久 | 久久九九热视频 | 丁香综合 | 一区二区中文字幕在线观看 | 亚洲成av人片一区二区 | 人妻精品无码一区二区三区 | 精品久久久无码中文字幕 | 成人精品999| 欧洲精品一区 | 国产巨乳在线观看 | 久久久免费观看视频 | 婷婷综合社区 | wwwav在线| 一级片视频免费观看 | 亚洲色图10p| 自拍偷拍国产 | 免费成人av| 三级第一页 | 91丨九色丨蝌蚪丨老版 | eeuss一区二区 | 久久精品中文闷骚内射 | 国产精品成人av性教育 | h视频免费在线 | 91视频在线观看免费 | 中文字幕av一区 | 丰满熟妇肥白一区二区在线 | 久久久www免费人成人片 | h网站在线播放 | 亚洲一区二区三区高清 | 岛国午夜视频 | 重口味av| 欧美男人天堂网 | 亚洲另类欧美日韩 | 内射国产内射夫妻免费频道 | 永久免费视频网站直接看 | 午夜影院在线观看视频 | 91蜜臀精品国产自偷在线 | 成人日批 | 99爱99| 无码久久av一区二区三区 | 免费黄色小说视频 | 国产在线拍揄自揄拍 | 春意影院福利社 | 四季av国产一区二区三区 | 五月婷六月 | 黄色av小说在线观看 | 911美女片黄在线观看游戏 | 不卡视频免费在线观看 | 在线视频 中文字幕 | 国产女同在线观看 | 日韩精品xxx | 999av| 69视频免费在线观看 | 国产婷婷色一区二区三区 | 日本人妻换人妻毛片 | 亚洲麻豆| 亚洲性色图 | 99ri视频 | 中国免费一级片 | 亚洲玖玖玖 | 龚玥菲一级淫片 | 久久精品国产一区二区电影 | 亚洲情涩| 哺乳期给上司喂奶hd | 成人影视免费 | 国产亚洲成av人片在线观看桃 | 成人黄色小视频 | 亚洲生活片| 综合久久综合久久 | 欧美亚韩一区二区三区 | 亚洲a级片 | 激情小说激情视频 | 六月色婷婷 |