调用:: memalign的代码无法在g ++ 4.8中编译

时间:2013-08-20 08:22:08

标签: c++ memory

我正在尝试在GCC 4.8.1上编译this source

g++ -std=c++11 -D DCACHE1_LINESIZE=64  lockfree_rb_q.cpp -lpthread -o  
lockfree_rb_q.exe

但是我收到编译错误,我不明白:

lockfree_rb_q.cpp:171:22: error: '::memalign' has not been declared
   thr_p_ = (ThrPos *)::memalign(getpagesize(), sizeof(ThrPos) * n);

令人讨厌的代码行是:

ptr_array_ = (T **)::memalign(getpagesize(),Q_SIZE * sizeof(void *));

我知道memalign是什么以及它的用途,但在此源代码中,我不知道为什么作者在::之前添加了memalign。这有什么用途?我不知道我可以使用哪些关键字来搜索这些信息。

2 个答案:

答案 0 :(得分:3)

::是C ++中的范围解析运算符。它用于在全局命名空间中显式调用函数。

您得到的错误是因为编译器无法在全局命名空间中找到memalign函数。要使用它,您需要包含malloc.h头文件。

请注意,就我所知,它也是一个POSIX扩展,因此它可能在您的环境中不可用。例如,如果您尝试使用MinGW或Microsoft的工具链编译代码,则它将无法使用。您需要找到替代品,例如this onethis one

从我在网上看到的内容来看,它也已被弃用,即使在可用的环境中也是如此。这很有道理,因为内置于所有现代操作系统中的内存分配机制已经返回了对齐的内存。你根本不需要它。

答案 1 :(得分:0)

您需要#include <malloc.h>才能使用memalign

#include <cstdlib>并改为使用posix_memalign

::中的::memalign告诉编译器在全局命名空间中查找该函数。

相关问题