目前,我正在使用针对32位MIPS平台的代码库(C,C++混合)。处理器是一种相当现代的处理器(仅提及我们具有足够的处理能力和内存)。

代码库使用诸如uint8 [1字节宽的无符号整数],uint16 [2字节宽的无符号整数],uint32 [4字节宽的无符号整数]等数据类型。

我知道在将代码移植到不同平台时如何使用这些构造有帮助。

我的问题是:

  • 使用uint16也足以满足uint16(如果有)的uint16的用途/好处是什么?
  • 使用较短的数据类型(考虑数据对齐)会节省内存使用吗?
  • 如果要节省一些字节的内存,在现代硬件中这样做是否明智?
  • 最佳答案



    如果那些uint16s是数组或结构的一部分,则可以节省内存,并且也许能够比那些相同数组或结构中的uint32s处理更大的数据集。这实际上取决于您的代码。

    数据协议(protocol)和文件格式可能使用uint16s,而使用uint32s可能是不正确的。这取决于格式和语义(例如,如果您需要将值从65535换为0,则uint16将自动执行此操作,而uint32则不会自动执行此操作)。

    OTOH,如果这些uint16s只是单个局部变量或全局变量,则将它们替换为32位变量可能没有太大区别,因为它们可能由于对齐而占用相同的空间,并且作为32位参数传递(在堆栈上)还是在寄存器中)。



    可能会节省下来,尤其是当uint16s是大数组的许多结构或元素的一部分时。



    是的,您降低了内存带宽(这始终是一件好事),并且当您处理较少的数据时,通常会降低各种缓存未命中率(数据缓存和TLB)。

    07-27 13:33