Max*_*Max 2 c linux gcc mmap static-allocation
我正在分配一个相当大的,大约100GB的内存块.确切的大小在编译时始终是已知的.
我应该静态分配吗?
static char data[DATA_SIZE];
Run Code Online (Sandbox Code Playgroud)
还是使用mmap?
data = mmap(NULL, DATA_SIZE, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE|MAP_LOCKED|MAP_UNINITIALIZED, -1, 0)
Run Code Online (Sandbox Code Playgroud)
对于前者,应用程序(忽略启动时间)似乎运行速度略快.
忽略失败的分配,每种方法的优缺点是什么?
没有任何理由可以mmap用于此; malloc能够做到这一点,并且mmap无论如何通常都会在引擎盖下使用,但是使用它malloc会使你的代码更简单,更容易理解,更便携.
至于静态数组是否更可取.主要的一点是它强迫你有一个实际的单例(这是坏的),而不是拥有一个数据结构的实例,即使你不需要它,也可以存在于多个实例中.根据您的观点,使用静态数组(可能是pro或con)的另一个方面是它将故障情况从您必须在运行时处理的事件移动到程序的调用者必须处理的事情(由于失败execve或控制到达您的过程之前的早期过程终止).
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |