看了一下方法说明,传true时CLR会在调用StructureToPtr()之前先调用DestroyStructure(),而后一个方法注释
Frees all substructures pointed to by the specified unmanaged memory block.
释放指定非托管内存块所指向的所有子结构体
连起来看就是,当StructureToPtr()传入的结构体有引用指针型的子(包括孙子)结构体时,就会发生内存泄露
反之,如果只是基础类型,char,int之类的因为都在栈上,则不会泄露
调用Marshal.FreeHGlobal()是必要的,因为它能释放最顶层的结构体的内存=sizeof(structuretType),但是那些指针型的子结构体成员所占的内存就无能为力了,因为父结构销毁,子结构体成员的指针(在栈上)已经不知道了,自然无从释放