My C语言(linux)应用程序最少需要1 TB的内存。 8太字节是最好的。 如何在服务器中支持此类内存容量? 一种方法是建立我自己的PCI卡并放置128 GB DDR4模块,这是目前市场上最大的可用模块。但我将不得不重写所有malloc()调用和数组变量的所有寻址。这是否可以透明地在C中完成?我能想到的唯一方法是仅为数组使用PCI-express分配的内存并访问它们,我将不得不以这种方式重写所有函数:
put(huge_array,index,&data);
get(huge_array,index,&data);
就像在C ++中使用get()和put()方法一样。但我的应用程序不是C ++,而是C。
我还有什么其他选择,这不会花费我很多钱+我的衬衫?
答案 0 :(得分:1)
这是否可以透明地在C中进行?
是的,确实如此。 Linux中有一个很好的技巧,从Solaris继承,我相信,你可以编写自己的分配器,把它放到单独的共享库中去做
> LD_PRELOAD=mylib.so ./myapp
另一个可能的解决方案是使用malloc hooks,[check here](http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Hooks-for-Malloc.html),但此解决方案特定于Linux / GLIBC
更新
答案 1 :(得分:1)
如果您可以并行化您的工作,AWS的r3.8xlarge实例每个244 GiB,每小时2.66美元(在美国东部地区,其他地区的价格可能会有所不同)*。
相反,如果您不赶时间,可以使用内存较少但交换时间为1 + TiB的服务器,而无需更改malloc。