Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用硬盘快速访问更换RAM 我在一个内存高的机器上运行了一个内存密集型的C++ Linux应用程序(128GB RAM)。此应用程序预先保留约20GB的内存,以便以后用作缓冲区。我希望将这个应用程序移植到某种SBC上,比如Raspberry Pi,在这里我几乎没有内存可用(与通常的场景相比)。我在这里的想法是使用HDD(可能是SDD)而不是RAM来分配20GB内存。有没有更有效的方法?另外,在这种方法中,我的实现应该是什么:仅仅是二进制文件还是其他什么_C++_C_Linux_Memory - Fatal编程技术网

使用硬盘快速访问更换RAM 我在一个内存高的机器上运行了一个内存密集型的C++ Linux应用程序(128GB RAM)。此应用程序预先保留约20GB的内存,以便以后用作缓冲区。我希望将这个应用程序移植到某种SBC上,比如Raspberry Pi,在这里我几乎没有内存可用(与通常的场景相比)。我在这里的想法是使用HDD(可能是SDD)而不是RAM来分配20GB内存。有没有更有效的方法?另外,在这种方法中,我的实现应该是什么:仅仅是二进制文件还是其他什么

使用硬盘快速访问更换RAM 我在一个内存高的机器上运行了一个内存密集型的C++ Linux应用程序(128GB RAM)。此应用程序预先保留约20GB的内存,以便以后用作缓冲区。我希望将这个应用程序移植到某种SBC上,比如Raspberry Pi,在这里我几乎没有内存可用(与通常的场景相比)。我在这里的想法是使用HDD(可能是SDD)而不是RAM来分配20GB内存。有没有更有效的方法?另外,在这种方法中,我的实现应该是什么:仅仅是二进制文件还是其他什么,c++,c,linux,memory,C++,C,Linux,Memory,编辑:我可以将内存分配减少到2GB。不过,我在RPi中没有这种内存。因为整个项目都是将其移植到SBC,所以我需要用硬盘空间来解决它 > P> >首先考虑使用 MMAP>代码>将文件映射为SWAP。< /P> 然后,rpi使用32位ARM,这意味着您不能同时拥有所有20GB地址,因此您需要某种内存覆盖方法: 您的程序明确请求“内存控制器”在区域上交换输入/输出 您采用了锁缓冲区(类似于Direct3D)等模式,并让“内存控制器”管理和执行交换 底线,RPI不适合这项工作,你需要投入高昂的开发成本,

编辑:我可以将内存分配减少到2GB。不过,我在RPi中没有这种内存。因为整个项目都是将其移植到SBC,所以我需要用硬盘空间来解决它

> P> >首先考虑使用<代码> MMAP>代码>将文件映射为SWAP。< /P> 然后,rpi使用32位ARM,这意味着您不能同时拥有所有20GB地址,因此您需要某种内存覆盖方法:

  • 您的程序明确请求“内存控制器”在区域上交换输入/输出
  • 您采用了锁缓冲区(类似于Direct3D)等模式,并让“内存控制器”管理和执行交换

  • 底线,RPI不适合这项工作,你需要投入高昂的开发成本,而不是简单的挑选便宜的PC。

    < P>我首先考虑使用<代码> MMAP将文件映射为交换。 然后,rpi使用32位ARM,这意味着您不能同时拥有所有20GB地址,因此您需要某种内存覆盖方法:

  • 您的程序明确请求“内存控制器”在区域上交换输入/输出
  • 您采用了锁缓冲区(类似于Direct3D)等模式,并让“内存控制器”管理和执行交换

  • 总之,rpi不适合这项工作,你需要投入比简单地选择一台便宜的PC更高的开发成本。

    如果没有进一步的分析,我不敢移植为128Go内存机器编写的应用程序,因为它实际上为低资源机器上的缓冲区保留了20 Go内存。由于辅助内存很少像主内存那样快,因此您可能必须重构应用程序的内存管理,使用显式交换,就像我们在70年代或80年代初所做的那样:

    • 定义作业可用的n个实际内存区域
    • 将完整数据存储在磁盘上的随机访问文件中
    • 需要时明确加载(并存储修改后的数据)
    这种模式已经很久没有使用了,因为普通计算机现在有足够的内存,并且速度足够快,可以让操作系统通过交换提供虚拟内存,而不必为程序提供如此繁琐的任务


    <>但是一旦你想在树莓Pi上运行一个内存密集型C++应用程序,您陷入了资源使用优化至关重要的老问题。

    如果没有进一步的分析,我不敢移植为128Go内存机器编写的应用程序,因为它实际上为低资源机器上的缓冲区保留了20 Go内存。由于辅助内存很少像主内存那样快,因此您可能必须重构应用程序的内存管理,使用显式交换,就像我们在70年代或80年代初所做的那样:

    • 定义作业可用的n个实际内存区域
    • 将完整数据存储在磁盘上的随机访问文件中
    • 需要时明确加载(并存储修改后的数据)
    这种模式已经很久没有使用了,因为普通计算机现在有足够的内存,并且速度足够快,可以让操作系统通过交换提供虚拟内存,而不必为程序提供如此繁琐的任务


    <>但是一旦你想在Raspberry Pi上运行一个内存密集型C++应用程序,你就陷入了资源使用优化被批判的老问题。

    一般:次级内存永远不会像主内存那么快。创建交换文件不是一个更容易的解决方案吗?这样,您根本不必更改我们的应用程序。@MatthiasDiener:使用交换文件并分配20GB缓冲区将导致系统和其他每个进程也交换。这可能会几乎冻结系统,这是一个坏主意。OP的想法是,你可以(应该)将程序为缓冲区留出的内存量减少到Pi中可行的数量。或者,正如其他人所建议的,你可以用更适合小型机器的东西来替换整个机制。如果你有可能插入hdd,你可以使用硬件ram磁盘。一般来说:辅助内存从来没有主内存快。创建交换文件不是更容易的解决方案吗?这样,您根本不必更改我们的应用程序。@MatthiasDiener:使用交换文件并分配20GB缓冲区将导致系统和其他每个进程也交换。这可能会几乎冻结系统,这是一个坏主意。OP的想法是,你可以(应该)将程序为缓冲区留出的内存量减少到Pi中可行的数量。或者,正如其他人所建议的,你可以用更适合小型机器的东西来替换整个机械装置。如果你有可能插入hdd,你可以使用硬件ram磁盘。最后一句话完全是主观的。你是否比我们其他人更了解user2779853工作的细节?将部署多少实例(N),一个Pi的单位成本是多少,N个24Gb或更多内存的单位成本是多少,以不同方式处理特定任务所需的时间成本是多少?在我看来,最后一句话冲淡了本来是个不错的答案。我同意这是我自己的观点,基于对解决非问题所涉及的开发成本的考虑。如果OP pro的话,我们还可以提供更多的替代方案来解决这个问题