我的共享内存对象保存在哪里?

时间:2018-02-23 14:02:03

标签: c++ memory ram shared flash-memory

我是编程新手,程序员在我的beaglebone black上共享一些内存,它运行在Linux上。

我需要确保内存保存在Beaglebone blacks ram上,而不是闪存。

文件路径是:

#define FILEPATH "/tmp/mmapped.bin"

fd = open(FILEPATH, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
    if (fd == -1) {
    perror("Error opening file for writing");
    exit(EXIT_FAILURE);
    }

用C ++编码

如果需要进一步的问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

文件路径/tmp/whatever不保证任何内容。您需要做的是登录您的Beaglebone,看看哪些文件系统安装在哪里。

要将文件存储在RAM中,您需要将它们存储在tmpfsramfs文件系统中。

在我的Fedora Linux笔记本电脑上,如果我输入mountcat /proc/mounts,我会看到所有已挂载的内容。这些是你正在寻找的那些行:

$ grep tmpfs /proc/mounts
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
tmpfs /tmp tmpfs rw,seclabel,nosuid,nodev 0 0

所以你可以看到在Fedora上,/tmp/目录是tmpfs/tmp/中的文件将在RAM中。

使用tmpfs需要注意的一点是默认的最大大小是RAM的一半。如果tmpfs中的文件,加上使用RAM的程序超过RAM大小,那么tmpfs数据将进入交换,如果Beaglebone甚至已经交换,它将在Flash上​​,我不记得此刻

如果没有交换或者它很小,那么对大文件使用tmpfs将导致OOM(内存不足)并破坏很多东西,所以要小心你使用多少。