gpt4 book ai didi

memory-management - RAM 中的堆栈和堆位置

转载 作者:行者123 更新时间:2023-12-04 13:59:13 24 4
gpt4 key购买 nike

What happens in the middle?
这个图像和其他类似的图像已经困扰我一段时间了。当我使用 malloc ,这应该是动态数据的一部分,堆。但是,这似乎是由堆栈从上方限制的,这似乎非常无效。程序无法预测我计划分配多少内存,那么程序如何判断堆栈放多远呢?似乎中间的所有内存都被浪费了,我想知道这对于可能从不使用任何动态内存的小型服务程序到可能分配大量内存的视频游戏的程序如何工作内存的片段。

比如说,我打开了 Microsoft Paint。如果我将高分辨率图片粘贴到其中,油漆的内存分配会飙升。这个内存是从哪里取来的?我真正想要的是我的整个 RAM 棒的快照,如上标记,以可视化计算机的许多程序如何将计算机的内存分区为一个整体,但我只能找到这样的图表,用于单个进程和单个部分内存。

最佳答案

您的图片不是 RAM,而是 address space一些 processvirtual memory . kernel配置 MMU管理虚拟内存,提供virtual address space一个过程,做一些 paging ,并管理 page cache .
顺便说一句,增加堆栈的不是编译器(所以你的图片是错误的)。编译器正在生成机器代码,可能会在 call stack 上推送或弹出内容。 .对于 malloc allocated堆,C standard library实现包含 malloc功能,以上 operating system基元或 system calls分配pages虚拟内存(例如 Linux 上的 mmap(2))。
Linux , 进程可以用 mmap(2) 请求改变它的地址空间-和 munmapmprotect .当程序以 execve(2) 启动时内核正在设置其初始地址空间。另见 /proc/ (参见 proc(5) 并尝试 cat /proc/$$/maps ....)。顺便说一句 mmap常用于实现malloc(3)dlopen(3) -运行时加载 plugins , 两者都在 RefPerSys 中大量使用项目(它是 Linux 的免费软件人工智能项目)。
由于大多数 Linux 系统都是 open source , 我建议你通过下载然后查看 GNU libc 的源代码来深入了解实现细节。或 musl-libc : 都实现 mallocdlopen以上 mmap和其他 syscalls(2) .
Windows 有类似的设施,但我不知道 Windows。引用 WinAPI 的文档
另请阅读 Operating Systems: Three Easy Pieces ,而且,如果你用 C 语言编写代码,一些好书,比如 Modern C和一些 C reference网站。请务必阅读 C 编译器的文档(例如 GCC )。另见 OSDEV网站。
请注意,现代 C 编译器允许生成大量 optimizations .阅读 what every C programmer should know about undefined behavior .另见 this draft报告。

关于memory-management - RAM 中的堆栈和堆位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32418750/

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