这个指针代码在 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位架构的地址space是2**32 = 4294967296。64位是18446744073709551616。我想你会没事的。编译器应该自己处理它。对于您的用例,它只是地址 space.

中的简单指针算法

您所做的是建立一个最基本形式的内存池。您的示例使用 char 数组和指针,因此您不太可能得到不需要的结果;但是,例如,如果您的第二个指针是 long *(通过适当的转换),您将获得对齐差异,这可能会导致代码显着变慢,除非您采取特殊预防措施手动对齐它们(使用十六进制值而不是十进制值进行偏移)使这一点更明显)

所以在更复杂的情况下,它 很重要,因为 long 可能需要对齐到 8 个字节或 4 个。

我很抱歉超出了问题的范围,但我不希望有人错误地将 char 的混合类型推断为 char[]