我多次运行这个测试程序,但评论的结果总是一样的. (我在sysctl.conf中有randomize_va_space = 2,所以我知道每次运行时都会使用不同位置的内存.)
char *a = malloc(50000000);a[49999999] = '';puts(a); // it outputs nothing since all are zeroesprintf("%p\n",a);if(a[5000] == '') // this condition is always true{ puts("It is a nul char.");}
是否有可能使系统内存不为零?这个Debian挤压安装有哪些选项可以激活始终为零内存?
解决方法 在任何现代 *** 作系统中,新获取的内存将包含非零值的唯一方法是先前由程序释放的内存被malloc重用.当从 *** 作系统(内核)获得新内存时,它最初是纯虚拟的.它没有物质存在;相反,它被映射为单个共享内存页面的写时复制映射,其中包含0个字节.第一次尝试写入时,内核将捕获写入,分配新的物理内存页,将原始页面的内容(在本例中为0字节)复制到新页面,然后恢复你的计划.如果内核知道新分配的物理内存已经零填充,它甚至可以优化复制步骤.这个程序既必要又有效.这是必要的,因为将可能包含来自内核或其他用户进程的私有数据的内存移交给您的进程将是一个严重的安全漏洞.这是有效的,因为在分配时不执行归零; “零填充”页面只是对共享零页面的引用.
总结以上是内存溢出为你收集整理的c – 内核将内存归零?全部内容,希望文章能够帮你解决c – 内核将内存归零?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)