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