gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:53:04 27 4
gpt4 key购买 nike

我正在尝试编译 this source在 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<之前添加了::/。这有什么用?我自己不知道可以使用什么关键字来搜索此信息。

最佳答案

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

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

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

根据我在网上阅读的内容,它也已被弃用,即使在它可用的环境中也是如此。这很有意义,因为所有现代操作系统中内置的内存分配机制都已经返回对齐的内存。您可能根本不需要它。

关于c++ - 调用::memalign 的代码无法在 g++ 4.8 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com