memalign在Mac OS X中没有定义?

时间:2014-01-10 15:29:49

标签: c++ macos malloc

如果有人设法将HCRF2移植到Mac OS X,我感兴趣。在使用 malloc.h 构建cpp文件时,我感到困惑。显然这是一个已弃用的软件包,并没有很多信息告诉你如何使用它来移植程序。任何帮助都会非常感激,因为我不是C ++人。

[  2%] Building CXX object hCRF/CMakeFiles/hCRF.dir/src/matrixSSE2.cpp.o
/Volumes/LocalScratchHD/LocalHome/savkov/Software/HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp:9:10: error: 'malloc.h' file not found with <angled> include; use "quotes" instead
#include <malloc.h>
     ^~~~~~~~~~
     "malloc.h"
/Volumes/LocalScratchHD/LocalHome/savkov/Software/HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp:89:20: error: use of undeclared identifier 'memalign'
            pData = (double*)memalign(16, size*sizeof(double));
                             ^
2 errors generated.
make[2]: *** [hCRF/CMakeFiles/hCRF.dir/src/matrixSSE2.cpp.o] Error 1
make[1]: *** [hCRF/CMakeFiles/hCRF.dir/all] Error 2
make: *** [all] Error 2

更新:

我将malloc.h复制到源文件夹中,事情进一步发展。现在我又收到了一个错误:

/.../HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp: In member function 'void Matrix<elType>::create(int, int, elType) [with elType = double]':
/.../HCRF2.0b/libs/shared/hCRF/src/matrixSSE2.cpp:89:52: error: 'memalign' was not declared in this scope

1 个答案:

答案 0 :(得分:3)

OSX缺少memalign(),但 posix_memalign()。它具有与memalign()不同的签名,因此您必须稍微调整一下这些来源。你在哪里:

pData = (double*)memalign(16, size*sizeof(double));

您可以将其重新编写为(未经测试):

err = posix_memalign((void **)&pData, 16, size*sizeof(double));

但我相信OSX总是在16字节边界上分配。如果是这种情况,您可以轻松使用malloc()

pData = (double *)malloc(size*sizeof(double));

(如果你走这条路线,最好包含一个断言来验证pData是否在16字节边界上。)