c++ - 如何包装 posix_memalign(在 mac 上编译旧代码库)?

标签 c++ macos malloc posix

我正在尝试在 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);

非常感谢任何指点。 (蹩脚的双关语意外!:)

谢谢

最佳答案

类似于:

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。您应该确保仍然以某种方式适本地处理错误。

关于c++ - 如何包装 posix_memalign(在 mac 上编译旧代码库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765300/

相关文章:

c++ - 创建序列号

c++ - 在另一个类中使用一个类对象

objective-c - 为应用程序创建 URI

c - 关于malloc的问题

c - 调用 Seg Fault 以销毁 malloced 结构

c++ - 动态规划 : coin change

c++ - 如何解决makefile中main的重定义

macos - OS X 中的并行 STL 算法

macos - install_name_tool 更新可执行文件以在 Mac OS X 中搜索 dylib

C - 如果矩阵大于 5x5,矩阵输入函数会出现运行时错误,但代码中没有定义大小