【发布时间】:2011-05-25 22:42:39
【问题描述】:
我正在用 C 编写一个模拟器。它的内存是字节可寻址的,所以我使用的是 char 数组,但我需要读/写未对齐的 32 位整数。
目前我正在使用*((unsigned int*) &memory[address]),但它看起来很可怕。最好的方法是什么?
【问题讨论】:
-
请注意,在某些机器体系结构上,像这样的未对齐的 32 位写入根本不起作用——而不是性能不佳,您会崩溃。因此,根据您的目标平台,您可能需要一次写入一个字节。
-
另请注意,对于某些编译器,
int并不完全是 32 位,所以如果您真的是指“四个字节”而不是“sizeof(int)”,并且您关心可移植性和可维护性,你需要做一些不同的事情。 -
在 Kristopher 的观点上再添加一件事。如果您希望您的模拟器可移植到小端和大端平台,正确的答案可能比
memcpy()或其他可以处理未对齐地址的字节方式副本更复杂一些。我不知道这对你来说是否重要,但如果它是你需要考虑的事情。 -
我知道字节序,但我认为在这种情况下它并不重要。模拟器只会在特定环境下运行。