我曾经认为每个内存位置包含8位,16位,32位或64位.因此0101将作为00000101存储在8位机器中(如果是负数则符号扩展).这是好的和花花公子,直到我出于好奇心在java中编写一个程序,以找出这个系统的更多内部工作.
有问题的方法如下:
public void printBinaryRep(File f){
try{
FileInputStream inputStream = new FileInputStream(f);
int next = 0;
byte b = 0;
while((next = inputStream.read()) != -1){
b = (byte)next;
System.out.println((char)next + " : "+Integer.toBinaryString(next));
}
inputStream.close();
}
catch(Exception e){System.out.println(e);}
}
Run Code Online (Sandbox Code Playgroud)
我从一个写着Hello World的文件中得到了这个输出
H : 1001000
e : 1100101
l : 1101100
l : 1101100
o : 1101111
: 100000
W : 1010111
o : 1101111
r : 1110010
l : 1101100
d : 1100100
Run Code Online (Sandbox Code Playgroud)
除了空间外,所有这些都很好看.它有6位而不是8位.我现在想知道所有这些信息是如何存储在内存中的.如果所有这些都存储在8位块中,比如
您好:10010001100101110110011011001101111
然后你可以简单地查看每个8位块并找出它代表的数字(然后是它所指的ASCII码).当一个不同大小的字符(如6位空格和4位/ n)与它们一起存储时,它是如何工作的?那么不会在大的位空间中存储少量的数据会浪费很多比特吗?
我认为我有一些基本的理解错误(或者某个地方的程序错了......).对不起,如果这个问题听起来很奇怪或太不必要.我只是想知道.我做了一些谷歌搜索,但它没有提出任何相关的东西.如果你能让我知道我哪里出错了或者指出了我正确的方向,我会非常感激.谢谢!
我对存储在ROM中的可执行文件有基本疑问.
据我所知,带有文本和RO属性的可执行文件存储在ROM中.问题是ROM是只读内存,如果有代码需要写入内存的情况会发生什么?
我无法想出任何一个例子来引用这里(可能我对这种情况一无所知或者我错过了基本的东西;)但是这个主题的任何亮点都可以帮助我理解!:)
最后关闭 - 1.有没有这样的情况?2.在这种情况下,将代码从ROM复制到RAM是答案吗?
回答一些例子可以大大帮助..
提前谢谢了!
/女士
在帕特森和轩尼诗书中:

但这不能作为EX危险处理:


为什么在MEM阶段完成转发?如何?有1个档位(第二个添加,我需要在下一个EX中使用EX的结果)?
我现在正在学习计算机体系结构课程,我们正在讨论基本的R-type和I-type指令(也就是RISC架构)等等.我似乎无法弄清楚如何优化这个码.
说明:此代码在数组中添加单词(由$ s1指向),直到达到零.结果存储在$ t1中.$ t0保留当前单词.
add $t1, $zero, $zero # Initialize result to zero
again:
lw $t0, 0($s1) # Load the word from the array
beq $t0, $zero, done # Terminate if current word is a zero
add $t1, $t1, $t0 # Add current word to result
addi $s1, $s1, 4 # Point to the next word in the array
beq $t1, $t1, again # Loop again
done:
nop # Do nothing
Run Code Online (Sandbox Code Playgroud)
我很难优化代码.我觉得beq $t1, $t1, again(因为它总是如此)是不必要的,但我不知道如何删除它.这是我的尝试,但我现在意识到我的代码不会终止. …
首先,这不是关于精度或类似问题的问题.
我的问题是,编译器如何决定如何表示数字?
我们以C为例.我写
double d = 4.5632;
Run Code Online (Sandbox Code Playgroud)
它如何选择二进制表示?我知道它没有完全代表,所以它如何选择最接近的可表示数字?它是在编译时完成的吗?它是由CPU还是操作系统完成的?
请,如果你知道这是如何发生只能回答,就像回答"不担心"也没有什么帮助.此外,"它取决于平台"也没有帮助,你可以选择一个平台并解释.
让我们关注单处理器计算机系统.创建进程时,据我所知,页面表会被设置,将虚拟地址映射到物理内存地址空间.每个进程都有自己的页表,存储在内核地址空间中.但是MMU如何为流程选择正确的页面表,因为不仅有一个流程在运行,而且会发生许多上下文切换?
任何帮助表示赞赏!
最好,西蒙
x86 computer-science processor process computer-architecture
为什么使用如此"怪异"的寄存器大小?关于为什么不优选使用64或128位这些寄存器的任何文档?
我知道计算机如何将数字转换为二进制.但我不明白的是,我听说计算机将所有内容(文字,说明,......)翻译成二进制文件,而不仅仅是数字.这怎么可能?
你能告诉我一些例子吗?就像计算机如何将字母"A"翻译成二进制文件一样?
当计算机看到二进制代码时,他们如何知道0和1的长字符串是表示数字还是单词或指令?
.
例:
假设计算机程序员编码字母"Z",以便将其转换为此二进制字符串:11011001111011010111
因此,当计算机遇到这个二进制字符串时,它会将其转换为字母"Z".
但是当我们问这台电脑"到1259年709的产品是什么?"时会发生什么?
电脑会回答我们"892631".但是,当转换为二进制时,该数字是11011001111011010111.
那么它如何在"Z"和"892631"之间产生影响呢?
.
请注意,我对计算机科学知之甚少,所以请用简单的术语解释一切.
binary computer-science binaryfiles binary-data computer-architecture
阅读有关缓存优化的文章(与循环中的缓存行关联..)
问题与此上下文有关:1024个整数数组.
大小:cpu cache 64k,缓存行32bytes,整数size:4 bytes.
英特尔核心2二重奏
根据我的cpu,8个整数适合缓存行.
[0,1,2,3,4,5,6,7,8,9,10,...,1023]
^
If I want to access 4 and go downward, 3,2,1 and 0 will be loaded already. 5,6,7 are loaded uselessly.
[0,1,2,3,4,5,6,7,8,..,1023]
^
If I want to access 7 and go downward, all the next elements will be in cache already. if I want to go upward, according to my cpu I will have to load another cache line immediatly after the arr[7] read.
Run Code Online (Sandbox Code Playgroud)
我对么 ?
但是什么告诉我,arr [4]不在一个会导致缓存行加载的地址而不是arr …