在一本书中,我读了以下内容:
32位处理器具有2 ^ 32个可能的地址,而当前的64位处理器具有48位地址空间
我的期望是,如果它是一个64位处理器,地址空间也应该是2 ^ 64.
所以我想知道这种限制的原因是什么?
x86-64 cpu-architecture virtual-memory processor-architecture
我正在尝试在非最终字段的对象初始化不足的情况下重现内存可见性问题(JLS 17.5 Final Field Semantics,FinalFieldExample类示例).它声明"但是,fy不是最终的;因此,reader()方法不能保证看到它的值4"
我试过这段代码:
public class ReorderingTest2 {
public static void main(String[] args) {
for (int i = 0; i < 2500; i++) {
new Thread(new Reader(i)).start();
new Thread(new Writer(i)).start();
}
}
static class Reader implements Runnable {
private String name;
Reader(int i) {
this.name = "reader" + i;
}
@Override
public void run() {
//System.out.println(name + " started");
while (true) {
FinalFieldExample.reader(name);
}
}
}
static class Writer implements Runnable {
private String name; …Run Code Online (Sandbox Code Playgroud) java multithreading constructor processor-architecture memory-visibility
答案者已经知道的东西,但在这里,无论如何都要显示我的思考过程:
从HLL到机器代码,这里发生了大量的事件(有连接器和其他东西,但是现在让我们忽略它):
HLL - >编译器 - >汇编程序---->机器代码
根据我购买的硬件,它可能有不同的处理器(Intel,SPARC,ARM等).汇编语言是特定于处理器的.因此,当代码来自Compiler - > Assembler时,生成的汇编代码是特定于处理器的.
切入点:
例如:我的硬件上有Windows操作系统.而且,我得到'用于Windows 7 64位的C编译器'.而且我在同一硬件上也有Ubuntu,我得到'Ubuntu 64位的C编译器'.
我可以在具有不同处理器架构的不同硬件上使用相同的OS,或者在相同硬件上使用不同的OS(如上例所示).当我下载C编译器时,为什么编译器被列为特定于操作系统?而不是处理器特定?由于编译器的重点是将HLL转换为Assembly,这是特定于处理器体系结构而不是特定于操作系统.
假设1.事情是如何完成的,当我下载适用于Windows 7和Ubuntu的编译器时,编译器如何知道要生成哪个特定于处理器的汇编代码?编译器是否附带各种特定于处理器的汇编程序?
compiler-construction assembly processor processor-architecture
为了将ARM处理器模式与x86操作模式(ring0到ring 3)进行比较,用户模式看起来就像ring3,用户空间程序在其中运行.但是我无法将ring0与系统模式或管理员模式联系起来.根据信息来源,似乎两种模式都可以很好地完成在特权模式下运行内核的工作.我能找到的两种模式之间的唯一区别是:
你能解释一下这些模式之间的差异吗,来自x86背景的人可以理解吗?
另外,模式之间的细微架构差异(如库存寄存器的数量)如何使一个优于另一个?
我最近看到过32位ARM处理器.我想知道为什么我们不能使用它来构建台式计算机.在那种情况下它与X86有何不同?ARM架构是否消耗更少的功率..这是在嵌入式系统中使用它们的原因吗?