Lor*_*one 7 linux posix memory-management shared-memory
shm_open()
mmap()
预定义的大 length
fork()
(几次)ftruncate()
随意这样做的目的是确保生成的每个进程fork()
在同一地址都有一个共享段.然而,我不想让RAM一直保持忙碌,而是动态调整它的大小(大小为0 - 大length
).
这可以吗?有UB吗?
不,那没关系.您可以随时截断基础文件,但SIGBUS
如果您访问超出文件边界的内存,则可能会收到.因此,您需要非常小心,不要触摸超出文件当前长度的内存(或捕获SIGBUS
并处理它).
来自man 2 mmap
:
使用映射区域可能会产生以下信号:
SIGBUS
尝试访问与文件不对应的缓冲区的一部分(例如,超出文件末尾,包括另一个进程截断文件的情况).