一、Win10 32位和64位的區(qū)別
Win10的32位和64位,都可以在同一套硬件上運(yùn)行。二者的差異在于可尋址的內(nèi)存空間不同,32位操作系統(tǒng)的最大可尋址內(nèi)存為4GB,而64位的操作系統(tǒng)則達(dá)到了2^64=16EB。
換言之,雖然現(xiàn)在的主流CPU支持多線程,卻沒有多達(dá)數(shù)百上千個線程同時運(yùn)行的環(huán)境,因而相對于可尋址內(nèi)存空間增長的速度,程序的運(yùn)行效率并沒有取得飛躍式的提高。
同時,64位的操作系統(tǒng)在處理浮點(diǎn)數(shù)時會更加準(zhǔn)確,在計(jì)算機(jī)繪圖、信號處理、科學(xué)計(jì)算、人工智能等領(lǐng)域都有更強(qiáng)的處理能力。而32位的操作系統(tǒng)在處理較小的應(yīng)用程序時,相對于64位操作系統(tǒng)有更快的速度和更好的兼容性。
二、MD516位和32位的區(qū)別
MD516位和32位的區(qū)別在于可尋址的內(nèi)存空間不同。MD516位的程序最多只能尋址2^16個內(nèi)存單元,也即64K,而32位的程序可以尋址2^32個內(nèi)存單元,大概在4GB左右。
這帶來的直接結(jié)果是在MD5上,我們并不能使用較大的內(nèi)存空間來存儲更大規(guī)模的數(shù)據(jù),而32位可以通過操作系統(tǒng)調(diào)用的方式來分配更大的內(nèi)存空間從而提高程序的性能。不過相對于MD516位,MD532位的程序占用的空間也更大,需要更高的運(yùn)算速度和內(nèi)存空間。
三、MD516位與32位實(shí)現(xiàn)MD5算法的代碼示例
MD516位實(shí)現(xiàn)示例代碼:
#include
#include
#define md5_size 16
typedef uint8_t byte;
typedef uint32_t word;
word X[] =
{
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
word A = 0x67452301;
word B = 0xefcdab89;
word C = 0x98badcfe;
word D = 0x10325476;
void md5(byte *data, size_t len, byte *result)
{
word X[16];
memcpy(X, data, len);
X[len/4] |= 0x80;
X[(len+8)/4] = len*8;
len += 8;
for(int i=0; i> (32 - j % 32)));
}
A += AA;
B += BB;
C += CC;
D += DD;
}
memcpy(result, &A, 4);
memcpy(result+4, &B, 4);
memcpy(result+8, &C, 4);
memcpy(result+12, &D, 4);
}
MD532位實(shí)現(xiàn)示例代碼:
#include
#include
#define md5_size 16
typedef uint8_t byte;
typedef uint32_t word;
word X[] =
{
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
word A = 0x67452301;
word B = 0xefcdab89;
word C = 0x98badcfe;
word D = 0x10325476;
void md5(byte *data, size_t len, byte *result)
{
word X[16];
memcpy(X, data, len);
X[len/4] |= 0x80;
X[(len+8)/4] = len*8;
len += 8;
for(int i=0; i> (32 - j % 32)));
}
A += AA;
B += BB;
C += CC;
D += DD;
}
memcpy(result, &A, 4);
memcpy(result+4, &B, 4);
memcpy(result+8, &C, 4);
memcpy(result+12, &D, 4);
}
四、結(jié)語
總的來說,MD516位與32位的區(qū)別在于可尋址內(nèi)存空間不同。相比于MD516位,MD532位可以處理更大規(guī)模的數(shù)據(jù),但也需要更高的運(yùn)算速度和內(nèi)存空間。不同的應(yīng)用場景需要不同的算法和優(yōu)化方式。我們需要根據(jù)實(shí)際情況選擇合適的方案,才能使程序達(dá)到最佳的性能。