posix_memalign,malloc和calloc与lli解释器有问题
问题描述:
我使用polybench内核。在polybench.c中,代码的行数如下:posix_memalign,malloc和calloc与lli解释器有问题
int ret = posix_memalign (&new, 32, num);
这行代码会导致lli解释器出现问题。我试图使用malloc代替,但我有同样的错误
LLVM ERROR: Tried to execute an unknown external function: posix_memalign
是否有任何其他的功能,而不必此问题可以使用?
答
如果您知道posix_memalign()
作为POSIX的一部分而不是标准C的一部分进行标准化,您不会感到惊讶。因此,提供该功能并不是遵从C实现的要求。另一方面,作为POSIX的一部分,其是广泛可用。
malloc()
承诺会返回一个指向内存的指针,以正确对齐任何类型的对象。我不确定为什么你要确保更强的对齐要求,但你的下一个最好的选择是aligned_alloc()
函数,这是自C2011以来的标准C.如果你的C函数库符合C2011,那么你就可以
#include <stdlib.h>
#include <errno.h>
// ...
new = aligned_alloc(32, num);
int ret = (new ? 0 : errno);
更换您的通话posix_memalign()
如果你没有aligned_alloc()
,或者说,那么你的实现可以提供其他的替代品,但他们都不是标准的。
我使用的是aligned_alloc,问题在于LLVM编译器不接受它们。 –
这似乎不是一个编译器问题,@ R.Omar。相反,它看起来像是系统C库提供了什么功能的问题。您不能调用实际上不可用的函数。您可能会在这里找到有用的信息:[我如何在Clang中使用C++ 11功能?](https://stackoverflow.com/q/10408849/2402272)(即使它是关于C++,而不是C),但我不能有用地运行列出可能的非标准替代品列表。检查您的系统/实施的文档的这种信息。 –