千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > MD516位和32位区别详解

MD516位和32位区别详解

来源:千锋教育
发布人:xqq
时间: 2023-11-23 14:56:03 1700722563

一、Win10 32位和64位的区别

Win10的32位和64位,都可以在同一套硬件上运行。二者的差异在于可寻址的内存空间不同,32位操作系统的最大可寻址内存为4GB,而64位的操作系统则达到了2^64=16EB。

换言之,虽然现在的主流CPU支持多线程,却没有多达数百上千个线程同时运行的环境,因而相对于可寻址内存空间增长的速度,程序的运行效率并没有取得飞跃式的提高。

同时,64位的操作系统在处理浮点数时会更加准确,在计算机绘图、信号处理、科学计算、人工智能等领域都有更强的处理能力。而32位的操作系统在处理较小的应用程序时,相对于64位操作系统有更快的速度和更好的兼容性。

二、MD516位和32位的区别

MD516位和32位的区别在于可寻址的内存空间不同。MD516位的程序最多只能寻址2^16个内存单元,也即64K,而32位的程序可以寻址2^32个内存单元,大概在4GB左右。

这带来的直接结果是在MD5上,我们并不能使用较大的内存空间来存储更大规模的数据,而32位可以通过操作系统调用的方式来分配更大的内存空间从而提高程序的性能。不过相对于MD516位,MD532位的程序占用的空间也更大,需要更高的运算速度和内存空间。

三、MD516位与32位实现MD5算法的代码示例

MD516位实现示例代码:


#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位实现示例代码:


#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);
}

四、结语

总的来说,MD516位与32位的区别在于可寻址内存空间不同。相比于MD516位,MD532位可以处理更大规模的数据,但也需要更高的运算速度和内存空间。不同的应用场景需要不同的算法和优化方式。我们需要根据实际情况选择合适的方案,才能使程序达到最佳的性能。

tags: max-idle
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT