OSX中内存分配缓慢
发布时间:2020-12-16 07:12:45 所属栏目:百科 来源:网络整理
导读:我试图追查我在OSX中的内存分配问题. 如果我正常编译并运行以下代码,它将运行得非常快. #include sys/mman.h#define SIZE 8 * 1024 * 1024int main(int argc,char const *argv[]) { for (int i = 0; i 50000; ++i) { mmap(0,SIZE,PROT_READ | PROT_WRITE,MAP
我试图追查我在OSX中的内存分配问题.
如果我正常编译并运行以下代码,它将运行得非常快. #include <sys/mman.h> #define SIZE 8 * 1024 * 1024 int main(int argc,char const *argv[]) { for (int i = 0; i < 50000; ++i) { mmap(0,SIZE,PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANON,-1,0); } return 0; } 但是,如果我编译相同的代码但链接到某个库(即:clang -o test test.c -lpcre),它将随机运行快(30ms)或非常慢(18秒). 请注意,我甚至没有使用该库,只是链接.我也注意到这似乎不会发生在任何库中. 我正在运行OSX 10.10.3.有任何想法吗? 解决方法
这只是其他人遇到的内核中的一个错误.内核中用于查找要分配的未使用的地址空间块的代码使用低效的搜索算法.
我怀疑它似乎取决于你是否链接一个库的原因是动态加载器(dyld)必须映射这样一个库,并且有时会将内核的VM管理数据转换为触发搜索效率低下的状态.它不会在每次运行中发生的原因可能与地址空间布局随机化(ASLR)有关. 我鼓励你向Apple提交一个关于此的错误,特别是因为你有一个很好的简单测试用例. (它可能会被重复关闭,因为我确信你不会是第一个提交它的人.但是,每个新的错误报告都可以帮助隔离它并在Apple中提升其优先级.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |