搬迁分配器发生了什么事情?
发布时间:2020-12-16 05:34:55 所属栏目:百科 来源:网络整理
导读:当我看到我以前从未见过的三个奇怪的功能(r_alloc,r_alloc_free和r_re_alloc)时,我正在阅读旧的glibc文档 here.他们实现了一个分配器,它将内存重定向到碎片整理目的,但我认为,但是我找不到更多的信息. 你能告诉我更多关于这个功能吗?他们还在Glibc吗?如果
当我看到我以前从未见过的三个奇怪的功能(r_alloc,r_alloc_free和r_re_alloc)时,我正在阅读旧的glibc文档
here.他们实现了一个分配器,它将内存重定向到碎片整理目的,但我认为,但是我找不到更多的信息.
你能告诉我更多关于这个功能吗?他们还在Glibc吗?如果没有,为什么他们被删除? 解决方法
你想了解什么?它们在您已经找到它们的手册中已经很清楚了. 它们与Win32 LocalAlloc和LocalLock有些相似 – 您可以获取内存对象的句柄,但要获取该对象的可用地址需要额外的步骤.这些通常是一个坏主意,除非是极度内存受限的系统.
没有.
因为它们通常是一个坏主意,并且会发现难以找到的错误. 更新:
这是一个例子: const char *my_strcat(const char *a,const char *b) { const size_t len_a = strlen(a); const size_t len_b = strlen(b); char *handle; if (r_alloc((void**)&handle,len_a + len_b + 1) == NULL) return NULL; memcpy(handle,a,len_a); memcpy(handle + len_a,b,len_b + 1); return handle; } // There are memory leaks here. Ignore them for now. int main() { const char *result = my_strcat("abc",my_strcat("def","ghi")); return strcmp(result,"abcdefghi"); } 你能发现这个bug吗? 该程序有时会成功,有时会以非零退出代码失败,有时会与SIGSEGV崩溃. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |