|
27楼

楼主 |
发表于 2024-10-8 10:39
|
只看该作者
来自 上海
本帖最后由 wxwxwx0 于 2024-10-8 10:42 编辑
转发一段科普吧:
给大家介绍一下AWE。AWE是32位系统下的延伸产物。32位系统应用程序只能访问4G内存空间(2的32次方,别去算了,大家公认的)。
但是,现在计算机发展迅速,有些及其已经拥有超过4G的内存,8G/16G都很多。为了让32位系统访问到这些内存。AWE就应运而生了。
AWE就是允许不同的应用,申请到一段物理内存,然后映射到自己的4G空间内。不同的应用都有自己的4G空间(其实有部分内核空间是共享
的,这里忽略)。例如,你有4个应用,每个4G,映射到不同的物理内存段,正好用光16G内存。
这个跟音频播放有什么关系呢? 大家都知道,播放器自称很NB的一种方式就是内存播放。 这里要从计算机内存管理讲起:
很久很久以前(大家都很熟悉的段子),计算机没有很多的内存,却有很多的应用,例如只有2G内存,但是却有4个应用,4个应用都有自己
的4G空间。2G内存哪里够用,操作系统就哪硬盘去冒充,那个应用要用,就把硬盘的东西复制到内存里,让应用用这块内存。应用切换,
内存里头的东西就复制到硬盘上,再把其他应用从硬盘里放到同样的内存中。这美其名曰交换(swap)。可以看出来,内存来来去去都是
那2G。交换也不是经常发生的,只有物理内存不足的时候才发生。
这就想银行账户,如果有十个客户,每人存款1千万,那就是1亿。但是银行现金可能只有2千万,谁用给谁,其他都那去放贷了。如果要取
大量现金,那好,请提前预约把。
大家可不想让你的WAV/APE在硬盘和内存中交换吧。 计算机有办法可以让应用锁定内存,禁止交换到硬盘上去。在32位XP时代,AWE刚好可以
做到这样的事情。从4G以外的物理内存中申请到一段,用来存放音频数据,而且这段物理内存是不会被交换到硬盘上的。所以,音频播放器标榜
支持真正的内存播放,支持AWE。
其实,操作系统一般都提供分配虚拟内存,同时锁定物理内存的系统调用。C函数库是没有的,C++的new也是没有这个作用的。Windows SDK中
就有这样的函数。 AWE刚好有这方面的功能,而且能利用4G以上,平时用不到的内存,既节省内存,又能保证锁定,一举两得。
64位操作系统下,AWE已经不需要了(因为64位可以访问4G以上的内存)。这时候制作播放器,就要研究操作系统的系统调用(大家也可以叫做API),
是如何进行虚拟内存分配和物理内存 映射以及锁定的。只要能完成这样的功能,就可以支持真正的内存播放。
因为锁定内存,可能会让其他应用没有物理内存可用,所以系统要求锁定内存需要有特权,因此大家能看到i众多大神要求在Windows中开启用户的
内存锁定特权。 另外,如果机器物理内存很少,虽然音频数据被锁定,但是其他应用或者音频播放器自身的内存也可能会频繁交换到硬盘,这样也会影响播放质量。
|
|