问题描述:
在网上看到下面的文字:
------------------------------
char* pchar = new char
内存分一个字节给pchar(CD)再追加四个内存监视字节(FD FD FD FD)
所以现在实际的字节为(CD FD FD FD FD)
char* pchar = new char[8]
实际相关内存为(CD CD CD CD CD CD CD CD FD FD FD FD)
分配了内存后,接受的字符不大于CD的个数就不会出错,如果大于的话,就会在内存校验时出错。
如果用cin的方式接受pchar不要忘记'\0'也占一个字符
--------------------------------
我用程序试验过,确实如此。
请问,为什么VC++要采用内存监视字节呢?
显然不可能仅仅为了标记分配内存的边界,因为内存单元是否被用可以利用内存分配表之类的数据结构来记录。否则,动态内存管理就极其不安全了。
解析:
内存分配表之类的数据结构?
这才不安全呢,你都不知道什么时候建立这个结构,又由谁去释放。并且windows又是虚拟内存的,你的记录的内存指针可能又要换算,而且这种表一旦被冲内存冲掉找都找不回来
而且还有多线程地址切换问题
可能性非常多,各种资源、地址的不安全 *** 作都可能导致内存占用增加。但在这些可能中,最常见的,是GDI资源泄露,也就是在OnDraw/OnPaint中使用的各种资源,在使用后没有正常的释放,因此,应该先检查GDI资源,如画笔、刷子、位图、DC等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)