我在Linux中使用共享内存,我有一些问题。
由于shmat
访问共享内存并使用内存,因此" 要求页面"每次移动共享内存的指针时,都会激活并增加内存。
然而,这是一个问题,因为内存容量相当大。
那么,有没有办法节省内存,比如在移动指针之前释放已读取和传输的内存?
伪代码如下所示。
My_struct *mem = NULL; // The structure size is 4K.
// shmat(...);
// For example, `VmRSS` was 10K. However, each iteration increases by 4K. (I know this is due to the `demand page`.)
// This is because the size of `My_struct` is 4K.
for (i=0; i<10000; i++)
{
printf("%s\n", mem[i].name); // Here, the memory usage increases every time it is repeated.
sleep(1); // It's just a pause to check VmRSS.
// If I run the loop 10,000 times, I need about 40M of memory.
// (In real world, it is dying because of OOM in loop)
}
shmdt(mem);
提前谢谢。