gpt4 book ai didi

linux -/proc/pid/maps 的内容

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:24 27 4
gpt4 key购买 nike

当我打印正在运行的进程的内容时,我得到这样的结果

00400000-00401000 r-xp 00000000 08:01 137910                             /home/user/process/a.out
00600000-00601000 rw-p 00000000 08:01 137910 /home/user/process/a.out
02434000-02455000 rw-p 00000000 00:00 0 [heap]

为什么 a.out 被加载到两个内存区域?是相同的部分还是不同的部分。一个有 r-xp,另一个有 rw-p。尽管我在程序中使用 malloc 分配了一个整数大小,但显示的堆大小不止于此。为什么会这样?

最佳答案

0x400000 处的 r-xp 区域是您的文本(代码)部分。它是可读和可执行的,但不可写。

位于 0x600000 的 rw-p 区域是您的数据部分。它是可读可写的,但不可执行。

readelf -S a.out将向您显示可执行文件中的部分,以及它们将被加载到内存中的位置(首先通过部分到段的映射。)


您关于 malloc4 字节的实验是不够的,因为这不是内存管理的工作方式。当您调用 malloc 时,您的 libc 实现将从它维护的大池中切出一小部分。 (这只是 您的进程 执行此操作 - 操作系统不会立即参与。)当您耗尽该池时,它将使用 brk(或 mmap) 系统调用要求内核给它更多的内存。

如果您malloc 大量内存,您可能会看到堆增长。此外,您可以在可执行文件上运行 strace,并查看它何时实际进行 brkmemmap 系统调用。

关于linux -/proc/pid/maps 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com