确定处理器的字大小

use*_*514 27 c processor word-size

如何确定CPU的字大小?如果我理解正确,int一个字应该是正确的吗?我不确定我是否正确.

那么打印sizeof(int)是否足以确定我的处理器的字大小?

Cli*_*ord 21

你对sizeof(int)的假设是不真实的; 看到这个.

由于您必须在编译时知道处理器,OS和编译器,因此可以使用编译器提供的预定义体系结构/ OS /编译器宏来推断字大小.

然而,在更简单和大多数RISC处理器上,字长,总线宽度,寄存器大小和存储器组织通常始终是一个值,对于具有各种大小的浮点寄存器,累加器,总线宽度的更复杂的CISC和DSP架构,这可能不是这样. ,缓存宽度,通用寄存器等

当然,这引出了一个问题,为什么你可能需要知道这个?通常,您将使用适合应用程序的类型,并信任编译器以提供任何优化.如果您认为优化是您需要的信息,那么您可能最好使用C99'快速'类型.如果您需要优化特定算法,请针对多种类型实施并对其进行分析.

  • 如果有人之前感到困惑,我修复了破碎/不正确的链接! (2认同)

mct*_*ylr 8

一个int应该是一个字吧?

据我了解,这取决于数据大小模型.有关UNIX系统的说明,64位和数据大小中立性.例如,Linux 32位是ILP32,而Linux 64位是LP64.我不确定Window系统和版本之间的区别,除了我相信所有32位Window系统都是ILP32.

如何确定CPU的字大小?

那要看.你假设哪个版本的C标准.我们在谈论什么平台.这是您尝试制作的编译或运行时间确定.

C头文件<limits.h>可以定义WORD_BIT和/或__WORDSIZE.


For*_*ker 7

sizeof(int)并不总是CPU的"字"大小.这里最重要的问题是,为什么你想知道字的大小....你试图做一些样的运行时间和CPU具体的优化?

话虽如此,在采用英特尔处理器的Windows上,标称字大小为32位或64位,您可以轻松搞清楚:

  • 如果您的程序编译为32位,则标称字大小为32位
  • 如果编译了64位程序,则标称字大小为64位.

这个答案听起来很陈旧,但它对第一顺序是正确的.但是有一些重要的微妙之处.即使现代Intel或AMD处理器上的x86寄存器是64位宽; 您只能(轻松)在32位程序中使用32位宽度 - 即使您可能正在运行64位操作系统.在Linux和OSX上也是如此.

此外,在大多数现代CPU上,数据总线宽度比标准ALU寄存器(EAX,EBX,ECX等)更宽.该总线宽度可以变化,一些系统具有128位,甚至192位宽的总线.

如果您担心性能,那么您还需要了解L1和L2数据缓存的工作方式.请注意,一些现代CPU具有L3缓存.缓存包括一个称为写缓冲区的单元