内核dll crt 堆 (126)

把这个放语言类。。是因为有个内核代码见居然没反应过来,惭愧!

先说堆,默认堆、额外堆,我就不说了,它们必须要依次访问的,所以多线程注意下就好。

new ->heapalloc,这段中用静态变量记录new类的个数。

看下dll,首先dll
先看隐式的:它会在程序加载的时候(**.dll 地址 import 函数….)
。讲dll的文件映像映射到进程的地址空间。
然而值得注意的是用的是写时复制,也就是说,dll的静态全局会被复制到新的空间里面。
而且,对预定的内存区域是为进程所拥有,也就是说,开辟内存啥的是玩的进程的,堆就会从默认堆分配,栈就会从进程空间预定。

然后是大问题来了CRT和MTD MDD到底有哪些错误?

一个程序可以链接多个库,这些库有的有静态的crt有的有动态crt。栈空间到好说,有响应汇编代码去销毁。对于堆,问题就来了。:

如果在相应库里面开辟堆,是否应该在程序中释放?
第一dll的crt是和程序共享一个堆空间的。所以完全没问题。第二 静态的crt是有自己的额外堆的,库里面开辟,在程序中释放内存是错误的做法。
这也就是为何大多数库都要自己写销毁内存的代码

最后讲下dll吧

//今天不想写了,改天继续(显式)

// //