繁体   English   中英

此指针代码在64位计算机上合法吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM