修正错误存储器(英语:Error-Correcting Code memory,缩写:ECC memory或ECC)指能够实现错误检查和纠正错误技术的内存。
在ECC技术出现之前,内存中应用最多的另外一种错误检查技术,是奇偶校验位(Parity)技术。
在数位电路中,最小的数据单位是“比特(bit)”,也叫“比特”。“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电平信号。在数字电路中8个连续的比特是一字节,不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。
而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。对于偶校验,若其结果是奇数,校验位就定义为1,反之则为0;对于奇校验则相反。当CPU返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就会试图纠正这些错误。
但奇偶校验位技术有个缺点,当内存查到某个数据位有错误时,由于不一定能确定错误在哪一个位,也就不一定能修正错误。所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并不能纠正错误。
此外,奇偶校验技术是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加,用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了。正是基于这样一种情况,错误检查和纠正(Error Checking and Correcting)应运而生了。
ECC与奇偶校验不同的是,如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正。数据位每增加一倍,ECC只增加一位检验位。也就是说当数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推。在内存中ECC能够容许错误,并可以将错误自动更正,使系统得以正常的操作,不致因错误而中断。
部分人认为服务器必须使用ECC内存,认为ECC内存性能较高,其实是一种谬误。ECC内存之所以广泛应用于服务器领域,并非其性能,而是因为ECC内存的纠错能力,使服务器保持稳定。
ECC本身并不是一种内存型号,也不是一种内存专用技术,它是一种广泛应用于各种领域的计算机中的纠错技术。
ECC内存还需要CPU和主板支持,并在BIOS中进行相应的设置,目前只应用在大多数服务器主板。