Memory 如果某个结构在一个字节可寻址内存中占用10位怎么办?

Memory 如果某个结构在一个字节可寻址内存中占用10位怎么办?,memory,memory-address,computer-architecture,Memory,Memory Address,Computer Architecture,假设结构从字节可寻址内存中的地址/索引1000开始-系统将如何工作?这个字节/字可寻址吗?只是为了命名和方便访问?处理器如何确认下一个地址已启动?对于字节可寻址的处理器(我所知道的所有处理器),数据访问的最小粒度为单个字节。尽管访问通常以更大的字粒度(通常为4或8字节)完成 如果要从地址0x1000开始加载10个连续位,则需要从地址0x1000加载第一个字节,从地址0x1001加载第二个字节。但是,对于第二个字节,您还需要使用一些操作来屏蔽不需要的位 另外需要注意的是,CPU中的寄存器大小通常为

假设结构从字节可寻址内存中的地址/索引1000开始-系统将如何工作?这个字节/字可寻址吗?只是为了命名和方便访问?处理器如何确认下一个地址已启动?

对于字节可寻址的处理器(我所知道的所有处理器),数据访问的最小粒度为单个字节。尽管访问通常以更大的字粒度(通常为4或8字节)完成

如果要从地址
0x1000
开始加载10个连续位,则需要从地址
0x1000
加载第一个字节,从地址
0x1001
加载第二个字节。但是,对于第二个字节,您还需要使用一些操作来屏蔽不需要的位


另外需要注意的是,CPU中的寄存器大小通常为32位或64位。10位结构很难使用,在实践中也不太可能看到。

对于字节可寻址的处理器(我所知道的所有处理器),数据访问的最小粒度是单个字节。尽管访问通常以更大的字粒度(通常为4或8字节)完成

如果要从地址
0x1000
开始加载10个连续位,则需要从地址
0x1000
加载第一个字节,从地址
0x1001
加载第二个字节。但是,对于第二个字节,您还需要使用一些操作来屏蔽不需要的位


另外需要注意的是,CPU中的寄存器大小通常为32位或64位。10位结构将很难使用,并且在实践中可能看不到。

编译器在对其进行操作时必须发出位移位和填充以重新对齐它。这就是为什么编译器不将对象放在位边界上。@ColonelThirtyTwo抱歉,您可以不向编译器解释它(处理器对内存的访问)吗?我也编辑了这个问题!我不知道内存中的位移位!IIRC大多数处理器不能加载位偏移量上的数据。从理论上讲,你可以创建一个可以的架构,但这并没有多大意义。编译器在对它进行操作时,必须发出位移位和一些东西来重新对齐它。这就是为什么编译器不将对象放在位边界上。@ColonelThirtyTwo抱歉,您可以不向编译器解释它(处理器对内存的访问)吗?我也编辑了这个问题!我不知道内存中的位移位!IIRC大多数处理器不能加载位偏移量上的数据。从理论上讲,你可以创建一个可以的架构,但这没有多大意义。在一个10位的结构中,1个字节将被完全消耗,剩下的2个字节将从下一个字节中消耗——那么是否可以从第11位(或第2字节的第3位)保存另一个结构/变量?其次,处理器如何知道一个字节已结束,另一个字节已开始?回答第二个问题,一个字节只是一组8位。所以从概念上讲,字节0是内存中的位0到7,字节1是位8到15。要访问小于一个字节的字段,您需要屏蔽该字节中您不感兴趣的位,只保留您关心的位。因此,从理论上讲,你可以有连续的10位结构,但你需要在你的程序中有一些逻辑来跟踪你感兴趣的位。在10位结构中,1个字节将被完全消耗,剩下的2个字节将从下一个字节中被消耗-因此,是否有可能从第11位保存另一个结构/变量(或第2字节的第3位)?其次,处理器如何知道一个字节已结束,另一个字节已开始?回答第二个问题,一个字节只是一组8位。因此,从概念上讲,字节0是内存中的位0到7,字节1是位8到15。要访问小于字节的字段,需要屏蔽掉该字节中不感兴趣的位,保持o所以理论上你可以有连续的10位结构,但是你需要在你的程序中有一些逻辑来跟踪你感兴趣的位。