- 主题:为什么要限制数组的大小为2GB?
vb6 是 32 位程序。
而 32 位程序使用 32 位的指针来管理内存。2 ** 32 就是 4GB
所有的 32 位程序都可以读到 4GB 的内存。
但是 Windows 一般配置只有 2GB 是可以被使用了。另外 2GB 只能被 Windows 自身使用。
所以结果就是 vb6 限制 2GB 的数组大小。不止 vb6,所有的 32 位程序都有这样的限制。
【 在 wuduan 的大作中提到: 】
: 我用VB,发现数组大小限制为2GB,开始我以为是元素个数限制,就是说byte数组可以2G个元素,long也可以这么多元素。
: 后来发现,不是,是数组的尺寸就是2GB,long就没有byte那么多元素了。
: 都什么年代了,为什么要有这个限制?
: ...................
--
FROM 110.84.121.*
我再说得更远一点。
其实 Windows 很早很早就发明了纤程。但是一直不实用,原因就是纤程需要分配内存地址。给纤程占用 1MB 的内存地址的话,系统里面但凡超过 1024 个纤程就不能再申请新纤程了。
所以当年的纤程用了复制内存来解决。但是和 c/c++ 的内存模型不兼容。所以最终纤程没有流行起来。
随着 64 位计算机的流行,现代应用程序终于可以放开手脚使用纤程 (fiber). 只可惜 Windows 编程再也没人感兴趣。
【 在 hgoldfish 的大作中提到: 】
: vb6 是 32 位程序。
: 而 32 位程序使用 32 位的指针来管理内存。2 ** 32 就是 4GB
: 所有的 32 位程序都可以读到 4GB 的内存。
: ...................
--
修改:hgoldfish FROM 110.84.121.*
FROM 110.84.121.*
那么你编译出来的是 32 位的还是 64 位的呢?
如果是 64 位的 vb.net 不太可能有这个限制。因为它的底层是 dotnot framework,没有这个限制。需要你需要看看你的编译目标。
【 在 wuduan 的大作中提到: 】
: 我用的vb.net
: 64位的程序
--
修改:hgoldfish FROM 183.253.146.*
FROM 183.253.146.*
vb6 只有 32 位版本。即使是运行在 64 位操作系统里面也有这个限制。
但本质上这个限制是操作系统的限制。
【 在 wuduan 的大作中提到: 】
: 你们到底谁说的对
: 前面那位说win的限制就是2G
: 你说是VB的限制
: ...................
--
FROM 183.253.146.*