目前,我正在使用针对32位MIPS平台的代码库(C,C++混合)。处理器是一种相当现代的处理器(仅提及我们具有足够的处理能力和内存)。
代码库使用诸如uint8 [1字节宽的无符号整数],uint16 [2字节宽的无符号整数],uint32 [4字节宽的无符号整数]等数据类型。
我知道在将代码移植到不同平台时如何使用这些构造有帮助。
我的问题是:
最佳答案
如果那些uint16s
是数组或结构的一部分,则可以节省内存,并且也许能够比那些相同数组或结构中的uint32s
处理更大的数据集。这实际上取决于您的代码。
数据协议(protocol)和文件格式可能使用uint16s
,而使用uint32s
可能是不正确的。这取决于格式和语义(例如,如果您需要将值从65535换为0,则uint16
将自动执行此操作,而uint32
则不会自动执行此操作)。
OTOH,如果这些uint16s
只是单个局部变量或全局变量,则将它们替换为32位变量可能没有太大区别,因为它们可能由于对齐而占用相同的空间,并且作为32位参数传递(在堆栈上)还是在寄存器中)。
可能会节省下来,尤其是当uint16s
是大数组的许多结构或元素的一部分时。
是的,您降低了内存带宽(这始终是一件好事),并且当您处理较少的数据时,通常会降低各种缓存未命中率(数据缓存和TLB)。