tft每日頭條

 > 科技

 > linux下c程序釋放内存

linux下c程序釋放内存

科技 更新时间:2024-07-03 03:36:29

linux下c程序釋放内存?操作系統利用體系結構提供的VA到PA的轉換機制實現虛拟内存管理,下面可以進一步來理解虛拟内存管理:,今天小編就來聊一聊關于linux下c程序釋放内存?接下來我們就一起去研究一下吧!

linux下c程序釋放内存(LinuxC編程)1

linux下c程序釋放内存

操作系統利用體系結構提供的VA到PA的轉換機制實現虛拟内存管理,下面可以進一步來理解虛拟内存管理:

# ps PID USER TIME COMMAND 1 root 0:14 {linuxrc} init 2 root 0:00 [kthreadd] 3 root 0:00 [ksoftirqd/0] 4 root 0:00 [kworker/0:0] 5 root 0:00 [kworker/0:0H] 7 root 0:47 [rcu_preempt] 8 root 0:00 [rcu_sched] 9 root 0:00 [rcu_bh] 10 root 0:00 [migration/0] 11 root 0:00 [watchdog/0] 12 root 0:00 [watchdog/1] 13 root 0:00 [migration/1] 14 root 0:00 [ksoftirqd/1] 16 root 0:00 [kworker/1:0H] 17 root 0:00 [kdevtmpfs] 983 root 0:02 mc_server

用ps命令查看當前終端下的進程,得知mc_server進程的id是983,然後使用car /proc/983/maps 命令查看它的虛拟地址空間。/proc 目錄中的文件并不是真正的磁盤文件,而是由内核虛拟出來的文件系統,當前系統中運行的每個進程在/proc 文件都有一個子目錄,目錄名就是進程的id,查看目錄下的文件可以得到該進程的相關信息。

# cat /proc/983/maps 00400000-00401000 r-xp 00000000 1f:05 384 /usr/bin/mc_server 00410000-00411000 rw-p 00000000 1f:05 384 /usr/bin/mc_server 16ce7000-17103000 rw-p 00000000 00:00 0 [heap] 7f8c7cb000-7f8c7d1000 r-xp 00000000 1f:05 208 /lib/librt-2.23.so 7f8c7d1000-7f8c7e0000 ---p 00006000 1f:05 208 /lib/librt-2.23.so 7f8c7e0000-7f8c7e1000 r--p 00005000 1f:05 208 /lib/librt-2.23.so 7f8c7e1000-7f8c7e2000 rw-p 00006000 1f:05 208 /lib/librt-2.23.so 7f8c7e2000-7f8c90d000 r-xp 00000000 1f:05 187 /lib/libc-2.23.so 7f8c90d000-7f8c91c000 ---p 0012b000 1f:05 187 /lib/libc-2.23.so 7f8c91c000-7f8c920000 r--p 0012a000 1f:05 187 /lib/libc-2.23.so 7f8c920000-7f8c922000 rw-p 0012e000 1f:05 187 /lib/libc-2.23.so 7f8c922000-7f8c926000 rw-p 00000000 00:00 0 7f8c926000-7f8c93a000 r-xp 00000000 1f:05 463 /usr/lib/libcncrDriver.so 7f8c93a000-7f8c949000 ---p 00014000 1f:05 463 /usr/lib/libcncrDriver.so 7f8c949000-7f8c94a000 rw-p 00013000 1f:05 463 /usr/lib/libcncrDriver.so 7f8c94a000-7f8cb86000 rw-p 00000000 00:00 0 7f8cb86000-7f8cb95000 r-xp 00000000 1f:05 494 /usr/lib/libibcUtilsMc.so 7f8cb95000-7f8cba5000 ---p 0000f000 1f:05 494 /usr/lib/libibcUtilsMc.so 7f8cba5000-7f8cba8000 rw-p 0000f000 1f:05 494 /usr/lib/libibcUtilsMc.so 7f8cba8000-7f8cbaa000 rw-p 00000000 00:00 0 7f8cbaa000-7f8cbc0000 r-xp 00000000 1f:05 204 /lib/libpthread-2.23.so 7f8cbc0000-7f8cbd0000 ---p 00016000 1f:05 204 /lib/libpthread-2.23.so 7f8cbd0000-7f8cbd1000 r--p 00016000 1f:05 204 /lib/libpthread-2.23.so 7f8cbd1000-7f8cbd2000 rw-p 00017000 1f:05 204 /lib/libpthread-2.23.so 7f8cbd2000-7f8cbd6000 rw-p 00000000 00:00 0 7f8cbd6000-7f8cbe0000 r-xp 00000000 1f:05 462 /usr/lib/libboardConfigOPMc.so 7f8cbe0000-7f8cbef000 ---p 0000a000 1f:05 462 /usr/lib/libboardConfigOPMc.so 7f8cbef000-7f8cbf0000 rw-p 00009000 1f:05 462 /usr/lib/libboardConfigOPMc.so 7f8cbf0000-7f8cc18000 rw-p 00000000 00:00 0 7f8cc18000-7f8cc35000 r-xp 00000000 1f:05 179 /lib/ld-2.23.so 7f8cc3e000-7f8cc42000 rw-p 00000000 00:00 0 7f8cc42000-7f8cc43000 r--p 00000000 00:00 0 [vvar] 7f8cc43000-7f8cc44000 r-xp 00000000 00:00 0 [vdso] 7f8cc44000-7f8cc45000 r--p 0001c000 1f:05 179 /lib/ld-2.23.so 7f8cc45000-7f8cc47000 rw-p 0001d000 1f:05 179 /lib/ld-2.23.so 7fdba5c000-7fdba86000 rw-p 00000000 00:00 0 [stack]

x86 平台的虛拟地址空間是0x0000 0000 0xffff ffff, 大緻上前3GB(0x0000 0000 00xbfff ffff)是用戶空間,後1GB(0xC000 0000 ~ 0xffff ffff)是内核空間。

0x00400000-0x00401000地址段,訪問權限是 r-x, 表示Text Segment, 包含.text段,.rodata段,.plt段等。

0x00410000-0x00411000地址段,訪問權限為r-w, 表示Data Segment,包含.data段,.bss段等。

0x16ce7000-0x17103000不是從磁盤文件加載到内存的,這段空間稱為堆(Heap), malloc函數動态分配内存是在這裡分配的。

從0x7f8c7cb000開始是共享庫的映射空間,每個共享庫也分為幾個Segment,每個Segment有不同的訪問權限。從堆空間的結束地址0x17103000到共享庫映射空間的起始地址0x16ce7000之間有很大的地址空洞,在地址分配内存時堆空間是可以向高地址增長的。堆空間的地址上限稱為Break, 堆空間要向高地址增長就要擡高Break, 映射新的虛拟内存空間到物理内存,這是通過系統調用brk實現的。malloc函數也是調用break向内核請求分配内存的。

0x7fdba5c000-0x7fdba86000是棧空間,其中高地址的部分保存着進程的環境變量和命令行參數,低地址的部分保存函數棧幀,棧空間是向低地址增長的,但顯然沒有堆空間那麼大的可供增長的餘地,因為實際的應用程序動态分配大量的并不少見,但是函數調用有很多局部變量的非常少見。棧空間是可能用盡的,并且比堆空間更容易用盡,用盡棧空間最終導緻段錯誤。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved