【发布时间】:2010-12-22 10:04:55
【问题描述】:
我读过的大多数代码都使用int 进行标准错误处理(从函数等返回值)。但我想知道使用uint_8 是否有任何好处将编译器 - 阅读:大多数架构上的大多数 C 编译器 - 使用立即地址模式生成指令 - 即嵌入 1 字节整数进入指令?我正在考虑的关键指令是函数后的比较,使用 uint_8 作为其返回类型,返回。
我可能想错了,因为引入 1 字节类型只会导致对齐问题——编译器喜欢将东西打包成 4 字节可能有一个完全理智的原因,这可能是每个人都只使用整数的原因-- 因为这是堆栈相关的问题而不是堆,所以没有真正的开销。
做正确的事是我的想法。但是为了争论,可以说这是一个流行的廉价微处理器,用于智能手表,它配置有 1k 的内存,但在其指令集中确实有不同的寻址模式:D
另一个稍微专门化讨论的问题(x86)是:文字在:
uint_32 x=func(); x==1;
和
uint_8 x=func(); x==1;
同一类型?或者编译器会在第二种情况下生成一个 8 字节的文字。如果是这样,它可以使用它来生成一个比较指令,该指令将文字作为立即值,并将返回的 int 作为寄存器引用。 See CMP instruction types..
【问题讨论】:
-
我认为您正在担心通常所说的“微优化”。你有具体的上下文吗?
标签: c cpu-architecture micro-optimization machine-instruction low-level-code