我的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()和()()方法一样。但是我的应用程序不是C++,而是C.
我还有其他的选择,那不会花我很多钱和衬衫吗?
最佳答案
在C语言中,这可以透明地实现吗?
是的,是的。在Linux中有一个很好的技巧,我相信是从Solaris继承来的,在这里你可以编写自己的分配器,把它放到单独的共享库中,然后
> LD_PRELOAD=mylib.so ./myapp
另一种可能的解决方案是使用malloc钩子,[检查这里](http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Hooks-for-Malloc.html),但是这个解决方案是特定于Linux/GLIBC的
更新
看看Overriding 'malloc' using the LD_PRELOAD mechanism
关于c - 如何在服务器中支持1 TB的内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35375679/