gpt4 book ai didi

c - 不同内存寻址方案的 C 代码的可移植性

转载 作者:太空狗 更新时间:2023-10-29 16:47:43 25 4
gpt4 key购买 nike

如果我没理解错的话,DCPU-16 specification对于 0x10c描述了一个 16 位地址空间,其中每个偏移量寻址一个 16 位字,而不是大多数其他内存体系结构中的一个字节。这会产生一些奇怪的后果,例如我想 sizeof(char)sizeof(short) 都会返回 1

在这些不同的内存寻址方案之间保持 C 代码的可移植性是否可行?要记住哪些陷阱?

编辑:也许我应该举一个更具体的例子。假设您有一些处理字节流的网络代码。您是通过在每个地址处仅放置一个字节来丢弃一半的内存以便代码可以保持不变,还是通过位移来概括所有内容以处理每个偏移量 N 个字节?

edit2:答案似乎集中在数据类型大小的问题上,这不是重点——我什至不应该提及它。问题是关于如何应对失去使用指针寻址内存中任何字节的能力。期望代码对此不可知是否合理?

最佳答案

完全可行。粗略地说,C 的基本整数数据类型具有支持的大小:

sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)

以上内容与规范中的内容不完全相同,但很接近。

正如 awoodland 在评论中指出的那样,您还希望 DCPU-16 的 C 编译器具有 CHAR_BIT == 16

不假设 DCPU-16 会有 sizeof (char) == 2 的好处,这是一个常见的谬误。

关于c - 不同内存寻址方案的 C 代码的可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com