我想知道在Linux机器上执行的C代码是否可以限制分配的堆大小。
这是否可行?
这样做的目的是我正在动态分配约70KBytes的内存和约20KBytes的堆栈内存,除了其他全局变量和本地变量。动态分配是通过malloc()完成的。
因此,为了确认问题不在堆分配中,我想限制将要运行的C代码的堆内存。
我在线阅读了一些文章,并发现如果使用malloc(),可能会超额承诺内存,但如果使用calloc(),我们将只获得可用内存而没有超额承诺,因为calloc()必须在提供指针之前初始化内存块为零。但由于初始化开销,我不想使用calloc()。
这是否可行?
这样做的目的是我正在动态分配约70KBytes的内存和约20KBytes的堆栈内存,除了其他全局变量和本地变量。动态分配是通过malloc()完成的。
因此,为了确认问题不在堆分配中,我想限制将要运行的C代码的堆内存。
我在线阅读了一些文章,并发现如果使用malloc(),可能会超额承诺内存,但如果使用calloc(),我们将只获得可用内存而没有超额承诺,因为calloc()必须在提供指针之前初始化内存块为零。但由于初始化开销,我不想使用calloc()。
calloc
开销(仅适用于小对象)是值得的吗?你进行过测量吗?在Linux上,大内存区域通常通过mmap
进行malloc
分配,这将提供零填充内存! - Basile Starynkevitch