malloc是crt函数,清零不清零(主要)是由编译器决定的。微软的vc编译器选择了在debug build里,让malloc自动填充烫烫烫。这是vc的特性,和windows系统本身并没有关系。
至于windows系统是否清零内存,应该看winapi里对应的HeapAlloc。这个函数才是windows开放给用户的真正的malloc,而且它是malloc的加强版,用户可以选择是否要把申请到的内存清零(通过HEAP_ZERO_MEMORY标志位选择)。
你误以为malloc是OS的一部分,觉得release版的malloc不清零等于OS不给清零。
你还误以为vc特有的debug填烫烫烫的特性能自动扩展给windows内核的接口VirutalAlloc。
我的判断是你没分清vc和windows这两个项目的层次和界限,所以才会有前面的争执。
【 在 eGust (十年) 的大作中提到: 】
: 这个帖子给了 m,也就是说版主的意见也是和稀泥
: 原本说的是,vc 的 debug 模式额外填充了特殊的字节。然后 leadu 说本来从 os 拿来的是清零的,还特意用 VirtualAlloc 举了例子。
: 你们的观点是,leadu 说的没错,那也就是说,release 模式下 malloc 拿来的是 os 给清零的。或者你们也觉得,VirtualAlloc 拿来的内存,vc 也会给填一遍 0xCC?
: ...................
--
FROM 101.84.13.*