- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试从 aligned alloc 启动示例代码:
#include <cstdio>
#include <cstdlib>
int main()
{
int* p1 = static_cast<int*>(std::malloc(10*sizeof *p1));
std::printf("default-aligned address: %p\n", static_cast<void*>(p1));
std::free(p1);
int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024));
std::printf("1024-byte aligned address: %p\n", static_cast<void*>(p2));
std::free(p2);
}
我的编译器给我这个错误:
$ g++-mp-8 main.cpp -std=c++17
main.cpp:10:38: error: no member named 'aligned_alloc' in namespace 'std'
int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024));
我正在使用 macOS High Sierra 10.13.6 并尝试使用 Macport 的 GCC 7.3.0、8.2.0 和 CLang(Apple LLVM 版本 10.0.0)编译此代码,它们都产生相同的错误。
编辑:无论 std::
存在与否,它都不起作用。
Edit2:我安装了 macOS Mojave,但没有解决问题。我希望它能重新安装 macOS 的工具链,但它没有。所以我想我不能接受提供的答案,直到我得到一个更具体的答案。
最佳答案
我没有使用 macOS,但我在使用自定义 g++ 的 linux 上遇到了类似的问题。如果您查看 cstdlib
header ,就会发现类似
#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_ALIGNED_ALLOC)
using ::aligned_alloc;
#endif
所以 aligned_alloc
仅在 C++17 可用且 glibcxx 支持时才被拉入 std
命名空间。如果定义了 _GLIBCXX_HAVE_ALIGNED_ALLOC
,您可以检查 x86_64-linux-gnu/bits/c++config.h
(或 macOS 上的类似内容)。如果不是,则您的 glibc 版本太旧。
对于 clang 和 libc++ 实现,如果定义了 _LIBCPP_HAS_C11_FEATURES
,则 aligned_alloc
可用,这又取决于最新版本的 glibc。
作为替代方案,您可以使用 boost .
关于c++ - 编译器找不到 'aligned_alloc' 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777209/
我正在清理警告并发现以下错误: warning: assignment makes pointer from integer without a cast buf = aligned_alloc(AL
我已经阅读了 aliged_alloc 的内容,我应该像这样使用它: void* aligned_alloc( std::size_t alignment, std::size_t size ); 它
我在看aligned-alloc()的解释: http://en.cppreference.com/w/c/memory/aligned_alloc void *aligned_alloc( size
有一个 Boost 教程提供了大约以下代码,针对我的问题稍作修改: #include #include int main() { std::vector > v(100); } 在这个例子中,
我正在使用 boost::alignment::aligned_allocator 以使 vector 的元素对齐。 但是,我注意到一个我无法在文档中解释的行为:如果我通过关键字 alignas 指定
我正在维护一些遗留代码,这些代码在托管对齐指针类中缺少复制赋值构造函数。我添加了一个如下(简化 View ): #include #include #include template clas
我注意到了 std::aligned_alloc()进入 C++17,我喜欢它。但是 - 当我需要重新分配时会发生什么?我可以手动执行此操作(假设当前分配地址的可用空间正好是我要求的空间量),但标准库
尝试获得一个可移植的函数以在具有对齐特征的堆上进行分配。 找到“aligned_alloc”,我认为它在 stdlib.h 中,但 gcc 似乎不这么认为 error: 'aligned_alloc'
我正在尝试从 aligned alloc 启动示例代码: #include #include int main() { int* p1 = static_cast(std::malloc(
考虑以下 (C11) 代码: void *ptr = aligned_alloc(4096, 4096); ... // do something with 'ptr' ptr = realloc(p
目标:了解 C++17 引入 std::aligned_alloc 的动机用于动态内存管理。 问题:对于 C++ 中的内存分配,由于 In what cases do I use malloc and
我正在尝试在 XCode 6 中编译这段代码: std::unordered_multimap, std::equal_to, Eigen::aligned_allocator > > trackin
根据 Eigen's documentation在创建具有“固定大小可向量化特征类型”的std::vector时,Eigen::aligned_allocator必须 strong> 被使用,例如:
尽管我确实尝试分别启用 std:c++latest 和 c++17,但我无法使用 c++17 中添加的 std::aligned_alloc() 函数。这是真实生活吗? Visual Studio 2
我想使用 C++11 的 std::aligned_alloc,但不幸的是它不适用于 Microsoft Visual Studio 2013。 我正在考虑,intsead,自己实现aligned_a
我是一名优秀的程序员,十分优秀!