Originally posted by jawbin at 2006-5-27 13:38:
我某些时候(例如,可能等同于 MS 的 GDI 堆的部分可能就会这样,此前我的时钟就是类似这样的,总之一些系统堆可能会这样处理以提高可能微乎其微 ...
jawbin 兄很喜欢跟 MS 的 GDI 接口较劲啊,呵呵。其实打开 DC 的时候只不过是打开了一个句柄,实际的开销不过是 "++reference_count;" 之类的引用计数操作,通常没有什么内存分配的问题。
在栈中分配对象的大小跟最终生成的可执行程序尺寸没有任何关系。绝大部分编译器中,在栈中分配对象仅仅是修改一下相对于 ESP 的一个偏移值而已。不信的话你可以编译以下C代码:
int main(int argc, char* argv)
{
unsigned char gbTEST; // 在栈上分配64MB缓冲区
return 0;
}
看看编译出来的可执行程序会不会有64MB那么大。甚至,不光这个可执行程序会很小,运行时所消耗的内存甚至也不会超过几K,因为gbTEST只是在地址空间上保留了64MB的段落,由于没有真正的使用到它,所以分配给你的仅仅是进程虚地址空间中的一段而不是物理内存。

, 我是很看不惯 GDI