有没有办法可以从2个字节改变指针的大小?

时间:2010-10-24 19:34:33

标签: c

我们能否以2字节的方式改变指针的大小,以便占用超过2个字节?

4 个答案:

答案 0 :(得分:10)

当然,编译一个32位(或64位)平台: - )

指针的大小是特定于平台的,它只能在16位平台上使用2个字节(十多年来还没有被广泛使用 - 现在所有主流 [更新] (桌面/ laptop / server) [/ update] 平台至少为32位)。

答案 1 :(得分:2)

如果指针大小为2个字节,则表示您正在16位系统上运行。

增加指针大小的唯一方法是使用32位或64位系统(这意味着过去15年左右的任何台式机或笔记本电脑)。

如果你在某个使用16位的嵌入式设备上运行,你唯一的选择就是切换到另一个使用32位的设备(或只是指针是16位)。

答案 2 :(得分:1)

当处理器被称为“X位”(其中X是16,32,64等)时,X指的是存储器地址寄存器的大小。因此,16位系统具有2字节的存储器地址寄存器。

你不能将4字节地址强制转换为更小的地址,因为它会丢失它所指向的部分地址。 (一个2字节的存储器地址寄存器只能指向2 ^ 16 = 64KB的存储器,而一个4字节的寄存器可以指向2 ^ 32 = 4GB的存储器。)

您可以随时“升级”(即在64位计算机上运行32位软件应用程序),因为指针范围没有丢失。但是你永远不能下台,这就是为什么64位程序不能在32位系统上运行的原因。

答案 3 :(得分:0)

将指针视为数字,而不是用于计算的实际值,它是系统内存映射中“插槽”的编号。

指针必须能够表示存储器映射的最高位置。也就是说,它必须至少具有表示最高位置数所需的字节数。

在16位系统中,可能的最高位置是0xFFFF(16位数字,所有位都设置为1)。指针也必须有16位,因此它可以达到该数字。

概括,在X位系统中,指针将具有X位。

您可以将指针存储在较大的变量中,就像在charintunsigned long long中存储数字1一样,如果您愿意的话;但是没有什么意义:认为,同样的方式,较短的指针将无法达到最高的记忆位置,较长的指针将能够指向内存中实际不存在的东西,所以为什么有它?

此外,你必须“欺骗”编译器。如果在代码中使用指针表示法,编译器将始终使用正确的字节数。但是,您可以指示编译器为另一个平台进行编译。