Python的SharedMemory为什么会默认将数组初始化为零?
核心结论
- 该行为稳定可复现,不属于Python未公开的内部逻辑,是主流操作系统的通用安全机制保证
- 你观察到的全零现象仅针对首次新建的共享内存段,如果是附加到已被写入过的既有共享内存段,不会出现自动清零
具体原因
主流桌面/服务器操作系统(Windows、Linux、macOS等)在分配全新的匿名内存/共享内存页给用户进程时,都会强制对内存内容做零填充,核心目的是避免前序进程使用该内存页时遗留的敏感数据泄露,属于系统级的安全默认行为:
- Linux/macOS 遵循POSIX规范,
shm_open创建的全新共享内存对象默认全零填充 - Windows 端
CreateFileMapping创建的全新页面文件托管的共享内存段默认全零填充
Python标准库的multiprocessing.shared_memory.SharedMemory仅仅是对操作系统上述API的薄封装,自身没有额外实现内存初始化逻辑,因此官方文档没有单独提及该表现。
补充注意
- 你贴出的测试代码存在笔误:Shell 1 创建共享内存时指定的
name='array_sm',Shell 2 中附加时写的是SharedMemory("depths_array"),正常执行会报错找不到共享内存段,运行测试前需要修正该命名不一致的问题。 - 如果业务逻辑强依赖共享内存初始全零的表现,建议显式做一次初始化写入操作,避免在小众嵌入式操作系统、自定义共享内存后端等特殊场景下出现行为不一致的问题。
内容的提问来源于stack exchange,提问作者Francis
相关产品推荐
相关产品推荐

