标签: computer-architecture

比特如何存储在内存中?(在块中?可以存储多个大小的位吗?)

我曾经认为每个内存位置包含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)与它们一起存储时,它是如何工作的?那么不会在大的位空间中存储少量的数据会浪费很多比特吗?

我认为我有一些基本的理解错误(或者某个地方的程序错了......).对不起,如果这个问题听起来很奇怪或太不必要.我只是想知道.我做了一些谷歌搜索,但它没有提出任何相关的东西.如果你能让我知道我哪里出错了或者指出了我正确的方向,我会非常感激.谢谢!

java memory binary computer-architecture bit

7
推荐指数
2
解决办法
1万
查看次数

NX标志如何工作?

你能解释一下NX旗帜是什么以及它是如何工作的(请提出技术问题)?

computer-architecture

7
推荐指数
1
解决办法
3947
查看次数

基于ROM的可执行文件的基本问题

我对存储在ROM中的可执行文件有基本疑问.

据我所知,带有文本和RO属性的可执行文件存储在ROM中.问题是ROM是只读内存,如果有代码需要写入内存的情况会发生什么?

我无法想出任何一个例子来引用这里(可能我对这种情况一无所知或者我错过了基本的东西;)但是这个主题的任何亮点都可以帮助我理解!:)

最后关闭 - 1.有没有这样的情况?2.在这种情况下,将代码从ROM复制到RAM是答案吗?

回答一些例子可以大大帮助..

提前谢谢了!

/女士

embedded cpu operating-system computer-architecture

7
推荐指数
1
解决办法
5100
查看次数

MIPS管道转发(双重数据危险)

在帕特森和轩尼诗书中:

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

为什么在MEM阶段完成转发?如何?有1个档位(第二个添加,我需要在下一个EX中使用EX的结果)?

pipeline mips computer-architecture

7
推荐指数
1
解决办法
8694
查看次数

优化此汇编代码

我现在正在学习计算机体系结构课程,我们正在讨论基本的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(因为它总是如此)是不必要的,但我不知道如何删除它.这是我的尝试,但我现在意识到我的代码不会终止. …

assembly computer-architecture

7
推荐指数
1
解决办法
245
查看次数

二进制数表示

首先,这不是关于精度或类似问题的问题.

我的问题是,编译器如何决定如何表示数字?

我们以C为例.我写

double d = 4.5632;
Run Code Online (Sandbox Code Playgroud)

它如何选择二进制表示?我知道它没有完全代表,所以它如何选择最接近的可表示数字?它是在编译时完成的吗?它是由CPU还是操作系统完成的?

,如果你知道这是如何发生只能回答,就像回答"不担心"也没有什么帮助.此外,"它取决于平台"也没有帮助,你可以选择一个平台并解释.

c floating-point binary computer-architecture

7
推荐指数
1
解决办法
467
查看次数

系统如何选择正确的页面表?

让我们关注单处理器计算机系统.创建进程时,据我所知,页面表会被设置,将虚拟地址映射到物理内存地址空间.每个进程都有自己的页表,存储在内核地址空间中.但是MMU如何为流程选择正确的页面表,因为不仅有一个流程在运行,而且会发生许多上下文切换?

任何帮助表示赞赏!

最好,西蒙

x86 computer-science processor process computer-architecture

7
推荐指数
2
解决办法
3396
查看次数

为什么Intel x87寄存器是80位宽?

为什么使用如此"怪异"的寄存器大小?关于为什么不优选使用64或128位这些寄存器的任何文档?

x86 assembly intel computer-architecture x87

7
推荐指数
1
解决办法
845
查看次数

计算机如何将一切翻译成二进制?当他们看到二进制代码时,他们如何知道它是代表数字还是单词或指令?

我知道计算机如何将数字转换为二进制.但我不明白的是,我听说计算机将所有内容(文字,说明,......)翻译成二进制文件,而不仅仅是数字.这怎么可能?

你能告诉我一些例子吗?就像计算机如何将字母"A"翻译成二进制文件一样?

当计算机看到二进制代码时,他们如何知道0和1的长字符串是表示数字还是单词或指令?

.

例:

假设计算机程序员编码字母"Z",以便将其转换为此二进制字符串:11011001111011010111

因此,当计算机遇到这个二进制字符串时,它会将其转换为字母"Z".

但是当我们问这台电脑"到1259年709的产品是什么?"时会发生什么?

电脑会回答我们"892631".但是,当转换为二进制时,该数字是11011001111011010111.

那么它如何在"Z"和"892631"之间产生影响呢?

.

请注意,我对计算机科学知之甚少,所以请用简单的术语解释一切.

binary computer-science binaryfiles binary-data computer-architecture

7
推荐指数
3
解决办法
1万
查看次数

C - 缓存行和关联

上下文

阅读有关缓存优化的文章(与循环中的缓存行关联..)

问题与此上下文有关: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 …

memory arrays optimization caching computer-architecture

7
推荐指数
1
解决办法
616
查看次数