搬迁分配器发生了什么事情?

搬迁分配器发生了什么事情?,第1张

概述当我看到我以前从未见过的三个奇怪的功能(r_alloc,r_alloc_free和r_re_alloc)时,我正在阅读旧的glibc文档 here.他们实现了一个分配器,它将内存重定向到碎片整理目的,但我认为,但是我找不到更多的信息. 你能告诉我更多关于这个功能吗?他们还在Glibc吗?如果没有,为什么他们被删除? Can you tell me more about that functions 当我看到我以前从未见过的三个奇怪的功能(r_alloc,r_alloc_free和r_re_alloc)时,我正在阅读旧的glibc文档 here.他们实现了一个分配器,它将内存重定向到碎片整理目的,但我认为,但是我找不到更多的信息.

你能告诉我更多关于这个功能吗?他们还在Glibc吗?如果没有,为什么他们被删除?

解决方法

Can you tell me more about that functions?

你想了解什么?它们在您已经找到它们的手册中已经很清楚了.

它们与Win32 LocalAlloc和LocalLock有些相似 – 您可以获取内存对象的句柄,但要获取该对象的可用地址需要额外的步骤.这些通常是一个坏主意,除非是极度内存受限的系统.

Are they still in Glibc?

没有.

If not,why they were removed?

因为它们通常是一个坏主意,并且会发现难以找到的错误.

更新:

What kind of BUGs are possible by using something like that?

这是一个例子:

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崩溃.

总结

以上是内存溢出为你收集整理的搬迁分配器发生了什么事情?全部内容,希望文章能够帮你解决搬迁分配器发生了什么事情?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存