Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188781
  • 博文数量: 45
  • 博客积分: 1577
  • 博客等级: 上尉
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-01 16:40
个人简介

xxx

文章分类

全部博文(45)

文章存档

2012年(4)

2011年(14)

2010年(8)

2009年(19)

我的朋友

分类: WINDOWS

2009-11-28 16:10:49

以下英文摘自vc++6.0的msdn

To create a modal dialog box, construct an object on the stack using the constructor for your derived dialog class and then call DoModal to create the dialog window and its controls. If you wish to create a modeless dialog, call Create in the constructor of your dialog class.

You can also create a template in memory by using a data structure as described in the Win32 SDK documentation. After you construct a CDialog object, call to create a modeless dialog box, or call and to create a modal dialog box.

由此看出对话框对象一般是建立在程序的栈上,所以应避免在对话框中分配大的内存.

当然第二段英文说你自己可以在内存中实例化一个对话框,这就另当别论了

vc++中一般的应用程序分配的栈一般为1M,可以自己设置。堆的分配的大小只受系统虚拟地址大小的限制。

以下为转载

程序中能使用的空间和ram没直接关系,一个应用程序(进程)的堆栈默认为1M。   
Win32应用程序编程接口中,每一个进程都有自己多达4GB的虚拟地址空间。内存中低位的2GB(从0x00到0x7FFFFFFF)可以为用户所用,高位的2GB(从0x80000000到0xFFFFFFFFF)为内核所保留。   
在堆上可分配的对象所占用的内存的总量只受限于系统可有的所有虚拟内存空间。   
空间分配是以进程为单位的,线程没有自己的堆. 
VirtualAlloc可以保留进程虚拟地址空间中的一段、保留地址空间并不为它们分配物理存储,而只是防止其它分配操作使用这段空间,所以它不一定在ram里,当然你可以用VirtualLock将进程一个或多个占用页锁定在物理内存RAM中   
对于x86计算机来说,宿主页大小为4KB,可以使用函数GetSystemInfo来获得当前计算机的页大小。

对于x86计算机来说,宿主页大小为4KB,可以使用函数GetSystemInfo来获得当前计算机的页大小,页文件就是实际内存的映像,系统的内存换页调度算法会将一段时间不使用的内存按页为单位交换到页文件中去,这样能够腾出空间来加载需要立即执行的代码或数据段到内存中。如果你使用的是win2k,那么C:\PAGEFILE.SYS就是页文件;

对于new操作来说,是用的进程的默认heap.初始时为默认1M,如果new的大小总共超过了1M,则会自动增加进程默认的heap

Windows平台new的实现是:new->HeapAlloc->VirtualAlloc->驱动程序

new是对HeapAlloc的简单封装

阅读(2041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~