dee*_*pak 11 architecture variables bus
我完全理解32或64位系统的含义.所以基本上所有寄存器或字长都是32位或64位.
为简单起见,让我们采用一个32位系统并说我在C中编写一个程序,如果我声明一个int类型说"int a = 5;" 然后为var a保留一个字长的存储位置.因此,当我想要访问它时,我可以使用字地址为该内存位置.
但是说我有4个字符"char a,b,c,d;" 因为它是一个字节,每个都放在一个字中,所以如果我只想访问char b,我该怎么办?(说内存是字节可寻址的)现在说b是字中的第三个字节...那怎么来公共汽车?总线的第3个字节硬连接到第17到第24行?那么当只有b被访问时,其他24行会发生什么?
您问题的答案很大程度上取决于您使用的编译器以及 CPU、内存控制器和内存架构(缓存和外部内存)的内部工作原理。
您只能控制编译器(假设您使用的是 C 或 C++ 编译器)。当您使用小于字大小的变量时,编译器有不同的模式。有速度优化和内存优化的标志。根据这些标志中的哪一个被打开,编译器可能会选择生成将所有四个变量(在您的情况下)打包成一个字的代码。或者编译器可以选择为每个变量分配一个内存字,但使用特定字节来存储实际值。编译器针对每种情况执行此操作的方式是为 CPU 生成不同的指令集。在后一种情况下,如果变量是从内存中读取的,那么整个字会被放到总线上,然后被放入一个通用寄存器中。在前一种情况下,该字被放入寄存器,然后该字可以按位移位,其他位可以通过使用逻辑与运算清零。这样正确的字节将在寄存器中。或者可能是 CPU 架构支持一个字中的字节级访问,在这种情况下,它将只是 CPU 执行的一个操作。最后,了解内部发生的事情是个好主意,但您不会太在意,因为从您的角度来看,编译器生成的指令集会正常工作。只有在编写性能敏感软件时才会关心。在这种情况下,您需要了解 CPU 和内存的详细信息以及编译器支持的标志。这样正确的字节将在寄存器中。或者可能是 CPU 架构支持一个字中的字节级访问,在这种情况下,它将只是 CPU 执行的一个操作。最后,了解内部发生的事情是个好主意,但您不会太在意,因为从您的角度来看,编译器生成的指令集会正常工作。只有在编写性能敏感软件时才会关心。在这种情况下,您需要了解 CPU 和内存的详细信息以及编译器支持的标志。这样正确的字节将在寄存器中。或者可能是 CPU 架构支持一个字中的字节级访问,在这种情况下,它将只是 CPU 执行的一个操作。最后,了解内部发生的事情是个好主意,但您不会太在意,因为从您的角度来看,编译器生成的指令集会正常工作。只有在编写性能敏感软件时才会关心。在这种情况下,您需要了解 CPU 和内存的详细信息以及编译器支持的标志。了解内部发生的事情是个好主意,但您不会太在意,因为从您的角度来看,编译器生成的指令集会正常工作。只有在编写性能敏感软件时才会关心。在这种情况下,您将需要了解 CPU 和内存的详细信息以及编译器支持的标志。了解内部发生的事情是个好主意,但您不会太在意,因为从您的角度来看,编译器生成的指令集会正常工作。只有在编写性能敏感软件时才会关心。在这种情况下,您将需要了解 CPU 和内存的详细信息以及编译器支持的标志。