[英]What are the values that are stored in unused memory space?
我使用 mmap() 从 /dev/zero 分配了 4096 长度的内存空间,我发现我仍然可以访问这个空间之外的内存(例如 start_pt 是指向该空间的指针,我可以打印*start_pt+8192 没有任何分段错误)。 并且存储在越界区域中的值似乎是随机的。
有没有人知道这些值是什么以及为什么我可以访问它们?
有时,您的进程中的其他东西从操作系统请求了内存。 如果不检查您的具体过程,通常不可能说出什么。 候选人包括:
main
之前设置 C 环境的代码),它可能出于各种目的(准备文件缓冲区、为malloc
初始化内存池)请求了malloc
,和其他东西),包括它自己的计算。mmap
之前调用了任何例程,它们可能已经请求了内存。 例如,当您打开文件时可能会创建缓冲区, printf
为它需要执行的格式化操作准备一些工作区,而malloc
需要额外的内存来保存自己的记录,除了返回给您之外。从本质上讲,除了您在纯 C 代码中观察到的那些之外,内存中还有各种各样的事情正在发生。
未使用的内存不会映射到进程地址空间。 如果您可以访问内存,则意味着某些内容已使用 mmap(或等效项)映射了内存。如果内存未使用,您将无法访问它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.