【发布时间】:2019-05-18 03:09:34
【问题描述】:
The code分配内存保存width * height的图像如下:
const size_t alignment = 64;
size_t space = width * height * bytes_per_pixel + alignment;
rawdata = new unsigned char[space];
//typedef unsigned long int uintptr_t
uintptr_t ptr = reinterpret_cast<uintptr_t>(rawdata);
uintptr_t aligned = (ptr - 1u + alignment) & -alignment;
data = reinterpret_cast<unsigned char *>(aligned);
似乎在rawdata(即最初分配的内存)上执行了 64 字节对齐,从而生成了data 指向的对齐内存。但是,让我感到困惑的是这行:
uintptr_t aligned = (ptr - 1u + alignment) & -alignment
谁能帮帮我?
【问题讨论】:
-
请注意,这是一种过时的获取过度对齐内存的方法。自 C++17 起,C++ 支持请求此类内存。之前,你可以在POSIX系统上使用一些非标准的函数,比如
posix_memalign。
标签: c++ memory-management memory-alignment