【发布时间】:2018-11-29 07:15:08
【问题描述】:
我想在内存分配时保持内存地址为16字节对齐(在arm64中)
当我 malloc 一个空间时,我得到一个地址:
char * addr = (char*)malloc(1024);
那么addr可能不是16的倍数!所以我想做一些算术计算:
uintptr_t ip = reinterpret_cast<uintptr_t>(addr);
ip = (ip / 16) * 16; // here ip is Multiple of 16.
那么我怎样才能将 ip 投射到内存地址呢?使用 (char*) 或 (void*)
char * newIP = reinterpret_cast<char*> (ip) // is this right?
论文是没有错误的方法吗?便携呢?
【问题讨论】:
-
首先不要在 C++ 中使用
malloc,即使只是分配一大块字节也不行。这是一个坏习惯,您应该改用new[](我通常会推荐std::vector,但您的对齐要求会阻止这种情况)。其次,不要忘记在分配的数量上至少增加 15 个字节,因为您的算法会丢弃部分内存。最后,保留您收到的原始指针,因为您在释放内存时需要它。 -
我想你可能是looking for
std::align,但我不确定能否将其转化为答案。而且由于它基本上是指向与此评论相同的文档页面的链接,因此我不确定这是否是一个好的答案。 -
@某程序员老兄嗨某程序员老兄。谢谢你的提议,确实很重要。但是代码片段只是一个简化我的问题的例子。我想知道这个演员表是否有问题。
-
嗨 user4581301 @user4581301 谢谢你的建议,我也会试试 std::align
标签: c++