首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++4.9不支持对齐

g++4.9不支持对齐
EN

Stack Overflow用户
提问于 2014-11-21 15:29:19
回答 2查看 2.6K关注 0票数 8

在学习对齐问题等时,我意识到我的g++4.9 (macports )的实现不支持std::align。如果我试图(用-std=c++11)从http://www.cplusplus.com/reference/memory/align/编译这个示例代码

代码语言:javascript
复制
// align example
#include <iostream>
#include <memory>

int main() {
  char buffer[] = "------------------------";
  void * pt = buffer;
  std::size_t space = sizeof(buffer) - 1;
  while ( std::align(alignof(int), sizeof(char), pt, space) ) {
    char* temp = static_cast<char*>(pt);
    *temp = '*'; ++temp; space -= sizeof(char);
    pt = temp;
  }
  std::cout << buffer << '\n';
  return 0;
}

编译器将输出错误。

代码语言:javascript
复制
error: 'align' is not a member of 'std'

这似乎很奇怪,因为g++似乎实现了自g++4.8,https://gcc.gnu.org/projects/cxx0x.html (N2341)以来对对齐的支持。

代码在clang++下编译,没有任何问题。

这是我不知道的g++的一个众所周知的问题吗?我测试的在线编译器(ideone和coliru)也拒绝代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 15:35:18

是的,对于gcc来说,这是一个已知的缺失特征:

票数 12
EN

Stack Overflow用户

发布于 2016-06-07 12:13:01

作为另一种选择,您可以编写与std::align行为相匹配的自己的对齐代码。下一段代码是由David在以下文章中编写的:bug.cgi?id=57350

代码语言:javascript
复制
inline void *align( std::size_t alignment, std::size_t size,
                void *&ptr, std::size_t &space ) {
    std::uintptr_t pn = reinterpret_cast< std::uintptr_t >( ptr );
    std::uintptr_t aligned = ( pn + alignment - 1 ) & - alignment;
    std::size_t padding = aligned - pn;
    if ( space < size + padding ) return nullptr;
    space -= padding;
    return ptr = reinterpret_cast< void * >( aligned );
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27064791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档