我试图理解以下悖论:
我在64位Linux中运行程序。所以程序以64位模式运行(AMD64长模式的子模式),对吧? 但是这种模式没有分段,只有分页。那么为什么下面的代码会产生分段错误呢?
int main() {
int* ptr = (int*)0xABCDABCDABCD;
*ptr = 10;
return 0;
}
答案 0 :(得分:3)
它的称为分段错误,与底层的分页技术无关。这意味着(通常)你试图访问你允许的范围之外的内存(你的片段),它可能被称为块,块,节,memlim,xyzzy,plugh或任何术语真的。
与Java中的null 指针异常相同,尽管事实上没有"指针"在语言中: - )
在UNIX(SIGSEGV)中指示它的信号早在英特尔为我们提供原始x86芯片的分段架构之前就已存在。