这个指针代码在64位计算机上是否合法

时间:2015-08-11 16:28:07

标签: c pointers memory 64-bit 32bit-64bit

我计划在两个指针之间使用内存。我们称它们为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位架构兼容?

2 个答案:

答案 0 :(得分:0)

32位架构的地址空间是2 ** 32 = 4294967296.对于64位是18446744073709551616.我想你会没事的。编译器应该自己处理它。对于您的用例,它只是简单的指针算术,它仍然在地址空间中。

答案 1 :(得分:0)

您所做的是以最基本的形式设置内存池。您的示例使用char数组和指针,因此您不太可能得到不需要的结果;但是,如果你的第二个指针是class CustomCell: UITableViewCell { @IBOutlet weak var slider: UISlider! @IBOutlet weak var label: UILabel! @IBAction func sliderChanged(sender: AnyObject) { // set label text to slider.value here } } (正确的转换),你会得到对齐的差异,这可能会导致代码明显变慢,除非你采取特殊的预防措施来手动对齐它们(使用十六进制值而不是十进制来表示偏移量使这更明显一点)

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

我为超出问题的范围而道歉,但我不希望有人错误地将long的混合类型推断到char