Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
如何在c语言的Linux POSIX模型中共享现有的动态数组?_C_Arrays_Linux_Posix_Shared Memory - Fatal编程技术网

如何在c语言的Linux POSIX模型中共享现有的动态数组?

如何在c语言的Linux POSIX模型中共享现有的动态数组?,c,arrays,linux,posix,shared-memory,C,Arrays,Linux,Posix,Shared Memory,我有非常大的快速增长(realloc,tcmalloc)动态阵列(大约20-40亿倍)。在增长结束后,我希望在两个不同的应用程序之间共享此阵列。我知道如何准备共享内存区域并将我的完整阵列复制到其中,但这对内存来说太浪费了,因为我必须同时保留源阵列和共享目标阵列。是否可以在POSIX模型中共享已有的动态数组而不进行复制 编辑: 一点点解释 我能够在POSIX模型中使用内存分配(shm_open()和其他),但如果我这样做,我必须多次重新分配已经共享的内存段(从数据库到内存逐行读取数字)。与简单的r

我有非常大的快速增长(realloc,tcmalloc)动态阵列(大约20-40亿倍)。在增长结束后,我希望在两个不同的应用程序之间共享此阵列。我知道如何准备共享内存区域并将我的完整阵列复制到其中,但这对内存来说太浪费了,因为我必须同时保留源阵列和共享目标阵列。是否可以在POSIX模型中共享已有的动态数组而不进行复制

编辑:

一点点解释

我能够在POSIX模型中使用内存分配(shm_open()和其他),但如果我这样做,我必须多次重新分配已经共享的内存段(从数据库到内存逐行读取数字)。与简单的realloc()相比,它的开销要大得多

我有一个制作人,他从数据库读取数据并写入共享内存

我无法事先知道数据库中有多少条记录,因此在分配之前我无法知道共享数组的大小。由于这个原因,当生产者从数据库中逐行读取数据时,我必须重新分配大数组。共享并填充内存后,另一个应用程序从共享阵列读取数据。有时,这个大型共享阵列的大小可以更改,并用新数据补充

是否可以在POSIX模型中共享已有的动态数组而不进行复制

不,共享内存不是这样工作的。读&

复制20亿倍可能需要几秒钟

也许你可以用

顺便说一句,对于POSIX共享内存,大多数计算机将共享段的大小限制为几兆字节(而不是千兆字节)。启发式地,最大共享大小(在整个计算机上)应该远小于可用RAM的一半

我的感觉是,你的设计是不够的,你不应该在你的情况下使用共享内存。您没有解释您试图解决的问题以及数据是如何修改的 (你考虑过用吗?)问题是什么

你的问题闻起来很像一些问题,所以你真的应该解释得更多,激发它更多,并给出更广泛,更高层次的图片

是否可以在POSIX模型中共享已有的动态数组而不进行复制

不,共享内存不是这样工作的。读&

复制20亿倍可能需要几秒钟

也许你可以用

顺便说一句,对于POSIX共享内存,大多数计算机将共享段的大小限制为几兆字节(而不是千兆字节)。启发式地,最大共享大小(在整个计算机上)应该远小于可用RAM的一半

我的感觉是,你的设计是不够的,你不应该在你的情况下使用共享内存。您没有解释您试图解决的问题以及数据是如何修改的 (你考虑过用吗?)问题是什么


你的问题闻起来很像一些问题,所以你真的应该解释得更多,激励得更多,并给出更广阔、更高层次的图景。

你机器上所有的内存都是用来做什么的?仅仅一个数组就可以从DB接收到大约20亿(两倍)个数字的数学计算。16GB甚至32GB的RAM需要多少钱?让您编写代码以使用更少的RAM需要多少成本?我拥有的内存越多,能够加载的此类阵列的数量就越多。我的目标是通过消除过多的重复来更有效地使用内存。问题还不清楚。为什么不能使用shm作为分配器?另外,为什么阵列必须动态调整大小?为什么不采用多线程设计?你机器上的所有内存是用来做什么的?仅仅一个数组就可以从DB接收大约20亿(两倍)的数学计算数据。16GB甚至32GB的RAM需要多少钱?让您编写代码以使用更少的RAM需要多少成本?我拥有的内存越多,能够加载的此类阵列的数量就越多。我的目标是通过消除过多的重复来更有效地使用内存。问题还不清楚。为什么不能使用shm作为分配器?另外,为什么阵列必须动态调整大小?为什么不采用多线程设计呢?感谢您对我的一般问题给出了详细的回答。我必须花一些时间准备你的答案。请花时间改进你的问题,并给出总体动机(包括更详细地解释你想要什么样的应用程序)。谢谢你对我的一般问题的详细回答。我必须花一些时间准备你的答案。请花时间改进你的问题并给出总体动机(包括更详细地解释你想要什么样的应用程序)