我使用mmap()从/ dev / zero分配4096长度的内存空间,我发现我仍然可以从这个空间中访问内存(例如,start_pt是指向空间的指针,我可以打印出值* start_pt + 8192没有任何分段错误)。存储在越界区域的值似乎是随机的。
有没有人知道这些值是什么以及为什么我可以访问它们?
在某些时候,您的进程中的其他内容从操作系统请求内存。如果不检查您的具体流程,通常无法说出什么。候选人包括:
main
之前设置C环境的代码),它可能已经为各种目的请求了内存(准备文件缓冲区,为malloc
初始化内存池)和其他东西),包括它自己的计算。mmap
之前调用任何例程,他们可能已经请求了内存。例如,当你打开文件时可能会创建缓冲区,printf
会为它需要执行的格式化操作准备一些工作空间,而malloc
需要额外的内存来保存自己的记录,除非它返回给你。从本质上讲,除了您在普通C代码中观察到的内容之外,内存中还会发生各种各样的事情。
未使用的内存未映射到进程地址空间。如果你可以访问内存,这意味着某些内容已使用mmap(或等效内容)映射内存。如果内存未使用,则无法访问它。