1

我正在尝试在 GCC 4.8.1 上编译此源代码:

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. 这是为了什么目的?我不知道自己可以使用哪些关键字来搜索此信息。

4

2 回答 2

3

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

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

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

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

于 2013-08-20T08:26:50.537 回答
0

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

或者改为#include <cstdlib>使用posix_memalign

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

于 2013-08-20T08:25:09.450 回答