在Windows中,一个线程的栈空间的默认大小是1MB,对于MFC UI主线程,一般其栈空间的大小均为1MB,当UI主线程的数据较大时就可能会造成栈溢出,从而导致程序出现异常。那么出现栈溢出该如何解决呢?可以通过使用堆内存来消除这样的问题,即很多时候都用new来的堆内存。对于类数据,则直接使用new来的对象来存储。系统会给每个程序分配一个4GB的虚拟空间,其中包括存放代码的空间,以及存放数据的空间。正常情况下,这样的内存已经足够程序使用了。所以,对于大型UI程序,要将栈内存和堆内存有效的结合起来,这样才能保证程序的正常运行与使用。
很多教材都明确的指出,代码最好少用指针,指针是不安全的。但我要说的是,当系统数据量比较大时,为了避免栈溢出,我们必须去使用指针。其实指针并不可怕,我们在实际的开发过程中也遇到过很多关于指针的问题,但我们可以不断的改进和完善我们的代码,尽可能的去解决或规避可能出现的不安全问题。