相关疑难解决方法(0)

C++ 11中的动态对齐内存分配

posix_memalign并且_aligned_malloc在Windows上允许动态分配对齐的内存块.C++ 11中有类似的东西吗?据我所知,该alignas关键字仅适用于静态分配的对象.

c++ c++11

39
推荐指数
5
解决办法
2万
查看次数

动态分配正确对齐的内存:char 数组上的 new 表达式是否合适?

我遵循 Stefanus Du Toit 的沙漏模式,即在 C++ 中实现 C API,然后再次将其包装在 C++ 中。这与pimpl idiom非常相似,它对用户也是透明的,但可以防止更多与 ABI 相关的问题并允许更广泛的外语绑定。

与实现指针的方法一样,底层对象的大小和布局在编译时不被外界所知,因此它所在的内存必须动态分配(主要是)。然而,与pimpl情况不同,在pimpl情况下,对象已在分配点完全定义,这里它的属性完全隐藏在不透明指针后面。

获得的内存std::malloc是“适合任何标量类型”,这使得它不适合任务。我不确定new-expression。引自链接页面的分配部分:

此外,如果 new 表达式用于分配一个 char 数组或一个 unsigned char 数组,它可能会在必要时从分配函数中请求额外的内存,以保证不大于请求的数组大小的所有类型的对象的正确对齐,如果稍后将一个放入分配的数组中。

这是否意味着以下代码是合规的?

编程接口

size_t object_size      ( void );     // return sizeof(internal_object);
size_t object_alignment ( void );     // return alignof(internal_object);
void   object_construct ( void * p ); // new (p) internal_object();
void   object_destruct  ( void * p ); // …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management memory-alignment

6
推荐指数
1
解决办法
1096
查看次数

标签 统计

c++ ×2

c++11 ×1

memory-alignment ×1

memory-management ×1