谁在Linux中调用calloc()时将页面归零?

时间:2015-10-03 05:41:08

标签: linux ubuntu kernel calloc

我知道实现者可以选择是否要将malloc页面归零,还是让OS给他一个归零页面(为了更多优化目的)。

我的问题很简单 - 在Ubuntu 14.04 LTS中附带了linux内核3.16和gcc 4.8.4,谁会将我的页面归零?是用户土地还是内核土地?

2 个答案:

答案 0 :(得分:2)

它可以取决于记忆的来源。 var foo = function foo(args) { this.stuff = function() { return args } this.do = this; return this } console.log(foo("bar").do.stuff())代码是userland,并且将归零由进程重用的内存页面。当先前使用并释放内存但未返回到操作系统时,会发生这种情况。但是,如果页面是新分配给进程的,则操作系统已将其清除为0(出于安全目的),因此不需要由calloc清除。这意味着calloc可能比调用calloc后跟malloc更快,因为如果知道它已经归零,它可以跳过memset

答案 1 :(得分:1)

这取决于标准库的实现者,而不是主机系统。无法为特定操作系统提供具体答案,因为它可能是多个编译器及其库的构建目标 - 包括在其他系统上,如果您考虑交叉编译的可能性(构建在一种类型的系统上)目标另一个)。

我见过var formatted = dt.ToString("yyyy-MM-dd"); 的大部分实现都使用calloc()调用,然后调用malloc()或(对某些实现以unix为目标)调用遗留函数memset() - 它本身有时会被一个宏调用所取代,该调用会在许多最新版本的库中扩展为bzero()的调用。

memset()通常是手动优化的。但是,再次,它取决于图书馆的实施者。