4

基础数学(128 / 8 = 16)的说法不同。我有点失望,想要一些答案——因为根据我的习惯,这个符号(type_num_of_bytes_t)不仅描述了你可以放入变量的数据量,还描述了跨平台的固定变量大小,以及后者更重要的是恕我直言。我究竟做错了什么?

#include "boost/multiprecision/cpp_int.hpp"
using boost::multiprecision::uint128_t;

...

qDebug() << sizeof(uint128_t);

输出:24。

我使用标准 x86/64 架构 CPU,在 Windows 上使用 vs2013 进行编译。

更新:提升版本是 1.61。

4

1 回答 1

10

cpp_int 1.6.1

当以固定精度使用时,这种类型的大小总是比您对 N 位整数的预期大一个机器字:额外的字存储符号以及整数中实际使用的机器字数。后者是对较大的固定精度整数的优化,因此 1024 位整数具有与 128 位整数几乎相同的性能特征,而不是加法慢 4 倍,乘法慢 16 倍(假设所涉及的值总是适合 128 位)。通常,这意味着您可以使用足够宽的整数类型来应对“最坏情况”,即使大多数时候实际上可以使用更窄的类型来完成算术运算,性能也只会出现轻微的下降。

额外的机器字(x86/64 8字节)使大小为 24 而不是预期的 16。

于 2017-01-26T15:07:41.970 回答