浅析内存对齐

  1. 为什么要对齐
    计算机在存取数据的时候是需要依靠总线的。无论是数据总线,地址总线,或是控制总线……,只要是总线,总会有线宽的。即,一次可以传输多少位的二进制信号。
    而程序总是要输入输出的,输入输出的交互跟数据总线是分不开的。显然,数据总线越宽,CPU与缓存,内存,输入输出设备之间一次出传输的数据越多,数据传输的速度自然越快。
    从缓存或是内存中读取数据的时候,假如现在想要读的是个int型变量,4字节,32位,存放地址0x00000000 到 0x00000003。那么,对于32的数据总线是可以一次全部读出来的。但是前提是这个int变量存放的地址对齐的。设想如果存放的地址是0x00000001 到 0x00000004,那就没办法一次读出来了,只能分两次读。而且还要将第一次读出来的后三个字节跟第二次读出来的第一个字节拼起来。一个简单的读操作变得如此复杂。
    因而,为了能够快速的读写,加快程序的运行,数据的内存对齐是必不可少的。

  2. 如何对齐
    根据上面的描述,对齐的目的就是用尽量少的读操作完成读入一个数据。而实际的操作中,系统往往通过
    地址%(min(总线宽度,数据结构大小)) == 0
    来寻找对齐地址。
    考虑总线宽度为8字节,如果对于char类型而言,由于 min(8, 1) == 1,任何地址都是对齐的。而对于int类型而言,由于其为4字节,0x00000001这样的地址便不是对齐的。
    但是转念一想,在0x00000001地址上存着一个int变量,也是可以只由一次读操作把这个变量读出来的。一次读出的地址范围是0x00000000 到 0x00000007,而short变量在0x00000001 到 0x00000005的地址上。但是,读出的足有8个字节,要取其中的4个字节,还是要进行读操作的。把值读入到寄存器后,最方便的还是自然是利用eax寄存器的ah跟al来读。如果ah或是al读出的4个字节不能包括这个int变量,那便仍然要进行读两次然后拼接。

内容概要:本文详细介绍了施耐德M580系列PLC的存储结构、系统硬件架构、上电写入程序及CPU冗余特性。在存储结构方面,涵盖拓扑寻址、Device DDT远程寻址以及寄存器寻址三种方式,详细解释了不同类型的寻址方法及其应用场景。系统硬件架构部分,阐述了最小系统的构建要素,包括CPU、机架和模块的选择与配置,并介绍了常见的系统拓扑结构,如简单的机架间拓扑和远程子站以太网菊花链等。上电写入程序环节,说明了通过USB和以太网两种接口进行程序下载的具体步骤,特别是针对初次下载时IP地址的设置方法。最后,CPU冗余部分重点描述了热备功能的实现机制,包括IP通讯地址配置和热备拓扑结构。 适合人群:从事工业自动化领域工作的技术人员,特别是对PLC编程及系统集成有一定了解的工程师。 使用场景及目标:①帮助工程师理解施耐德M580系列PLC的寻址机制,以便更好地进行模块配置和编程;②指导工程师完成最小系统的搭建,优化系统拓扑结构的设计;③提供详细的上电写入程序指南,确保程序下载顺利进行;④解释CPU冗余的实现方式,提高系统的稳定性和可靠性。 其他说明:文中还涉及一些特殊模块的功能介绍,如定时器事件和Modbus串口通讯模块,这些内容有助于用户深入了解M580系列PLC的高级应用。此外,附录部分提供了远程子站和热备冗余系统的实物图片,便于用户直观理解相关概念。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值