【问题标题】:What data type is 16 bits in 32-bit OS and 32bits in 64-bit OS?32 位操作系统中的 16 位和 64 位操作系统中的 32 位是什么数据类型?
【发布时间】:2013-10-31 22:40:27
【问题描述】:

我正在寻找一种数据类型(将用作索引),它在 32 位操作系统中应该是 16 位,在 64 位操作系统中应该是 32 位。我使用 VS2010,我知道 HALF_PTR 可以使用,但用于索引时听起来不太好,我仍然可以将其键入更有意义的名称,但在此之前有任何已定义的数据类型可以用于这个目的?

【问题讨论】:

  • C 和 C++ 在这方面没有做出任何承诺,因此您必须阅读编译器的文档。
  • 这类问题无法解释为什么需要这种奇怪的动物。当 SO 用户名以“新手”开头时,会有额外的麻烦。使用 short 来索引 32 位代码中的数组不是一种优化。远非如此。
  • @Hans Passant,它用于在二进制 blob 标头中写入字段。此特定字段在 32 位操作系统中应为 16 位,在 64 位操作系统中应为 32 位。它不用作空间优化的数组索引。
  • 唯一重要的是用什么样的进程来读取它。这不一定是 64 位操作系统上的 64 位进程。
  • @HansPassant,应用程序没有启用 LARGEADDRESSAWARE。它是内存中的二进制 blob。

标签: c++ visual-c++ 32bit-64bit


【解决方案1】:

您可以使用特征来创建适合您系统的类型别名:

#include <cstdint>

template <unsigned int> struct HalfPtrImpl;
template <> struct HalfPtrImpl<4> { typedef uint16_t type; };
template <> struct HalfPtrImpl<8> { typedef uint32_t type; };

typedef HalfPtrImpl<sizeof(uintptr_t)>::type HalfPtr;

现在使用HalfPtr 作为您的类型。

(您可以通过多次使用std::conditional 来快速完成上述操作。为这只猫剥皮的方法有很多。)

【讨论】:

  • 32 个 byte 整数?这是一个非常宽的数据路径!
  • @BenVoigt:谁在哪里? :-)
猜你喜欢
  • 2015-09-26
  • 2013-08-29
  • 2011-02-20
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 2011-12-18
  • 2011-07-29
  • 1970-01-01
相关资源
最近更新 更多