相关疑难解决方法(0)

1字节!= 8位的系统?

我一直在读句子

不要依赖大小为8位的1字节

使用CHAR_BIT而不是8作为常量来转换位和字节

等等.今天有什么现实生活系统,这是真的吗? (我不确定C和C++之间是否存在差异,或者它是否与语言无关.如果需要,请重新加入.)

c c++ history byte computer-architecture

85
推荐指数
6
解决办法
2万
查看次数

小缓冲区优化和对齐

我正在编写一个围绕遗留API 的C++包装器.这个API为我提供了一个指针值来保存额外的数据,我想用它实现小缓冲区优化.

我已经实现了一个is_small_pod 元函数,它检查给定的类型是否是POD并且它适合于void*:

template< typename Type >
struct is_small_pod
  : std::integral_constant<
        bool
      , std::is_pod< Type >::type::value
        && sizeof( Type ) <= sizeof( void* )
    >
{};
Run Code Online (Sandbox Code Playgroud)

我正在设置这样的值:

// void*& param;
if( detail::is_small_pod< Type >() )
{
    *static_cast< Type* >( &param ) = value;
} else {
    param = new Type( value );
}
Run Code Online (Sandbox Code Playgroud)

我是否正确实施此优化?我相信当值对齐与指针的对齐不兼容时(这可能是奇数角的情况),这将失败.这种情况是否可能,或者我只是过度思考它?我应该如何扩展我的元函数以检查兼容的对齐

c++ c++11

10
推荐指数
1
解决办法
1244
查看次数

标签 统计

c++ ×2

byte ×1

c ×1

c++11 ×1

computer-architecture ×1

history ×1