繁体   English   中英

如何包装posix_memalign(在Mac上编译旧代码库)?

[英]How to wrap posix_memalign (to compile an old codebase on mac)?

我正在尝试在Mac上编译工具包。 它具有对malloc.h的memalign函数的引用,但是我可以为mac找到的唯一关闭函数是posix_memalign。 所以我试图包装posix_memalign看起来像memalign。

我对如何执行此操作感到有些困惑(由于void *和void **指针):

posix_memalign的签名是

int posix_memalign(void **memptr, size_t alignment, size_t size); 

memalign的签名是:

void *memalign(size_t blocksize, size_t bytes);

任何指针,不胜感激。 (me脚意外!:)

谢谢

就像是:

void *memalign(size_t blocksize, size_t bytes) {
  void *result=0;
  posix_memalign(&result, blocksize, bytes);
  return result;
}

&result将使您无法使用void**来调用posix_memalign ,然后您可以像memalign一样返回结果。

需要注意的一点是:这与行为不完全匹配-memalign通过errno返回错误,但是posix_memalign将它们作为int返回,并且没有碰到errno 您应该看到仍然可以正确地处理错误。

因此,正确处理错误:

void *memalign(size_t blocksize, size_t bytes)
{
  void *m;
  errno = posix_memalign(&m, blocksize, bytes);
  return errno ? NULL : m;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM