[英]Is this pointer code legal on 64-bit computers
我计划在两个指针之间使用内存。 我们称它们为pointer1和pointer2。 每个指针将连接到其自己的内存块,分别由block1和block2定义。
我认为这种方式适用于所有系统(32位和64位):
char block1[100000];
char *pointer1=block1;
char block2[100000];
char *pointer2=block2;
但是我认为更快的方法是使用以下代码:
char block[200000];
char *pointer1=block;
char *pointer2=block+100000;
我的问题是最后一个代码片段的最后一行是否与64位体系结构兼容?
32位体系结构的地址空间为2 ** 32 =4294967296。对于64位,则为18446744073709551616。我认为您会没事的。 编译器应自行处理。 对于您的用例,只是普通的简单指针算术仍在地址空间中。
您要做的就是以最基本的形式设置一个内存池。 您的示例使用了char数组和指针,因此您不太可能获得不想要的结果。 但是,如果您的第二个指针是例如long *
(使用正确的转换),则可能会导致对齐差异,这可能会导致代码明显变慢,除非您采取特殊的预防措施来手动对齐它们(使用十六进制值而不是十进制的偏移量会使这成为更加明显)
因此,在更复杂的情况下,这很重要,因为可能需要将long
对齐为8个字节或4。
我为超出问题范围而道歉,但我不希望有人错误地将char
的适用范围外推到char[]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.