【发布时间】:2014-10-12 21:23:23
【问题描述】:
我有一个数组uint8_t data[256]。但是每个元素都是单字节的。
我的数据总线是 32 位长。所以,如果我想访问 32 位,我会这样做:
DATA = data[i] + (data[i + 1] << 8) + (data[i + 2] << 16) + (data[i + 3] << 24);
但这会在内存中转换为 4 个单独的读取请求,每个请求一个字节。
如何以单笔交易的形式访问全部 4 个字节?
【问题讨论】:
-
如果
data的类型为int [256],则每个求和数不仅读取一个字节。 -
您必须使用非常非标准的编译器才能使
int data[256];由单字节组成。每个“字节”必须至少为 16 位(CHAR_BIT == 16)。我认为你所做的假设有些混乱。如果,正如您的一位 cmets 所建议的那样,您的意思是uint8_t data[256];,那么一个问题是“您是否要在不是 4 的倍数的i值处编制索引”?另一个问题是“如果您尝试将“不正确对齐”的内存地址作为 4 字节单元访问会发生什么?在冒险走捷径之前,您需要知道这两个问题的答案。