免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wkq5325
打印 上一主题 下一主题

[C] 关于gcc和vs的一点小看法和疑问 [复制链接]

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
11 [报告]
发表于 2010-08-18 12:24 |只看该作者
测试楼主代码,Mingw下错误代码死循环。

论坛徽章:
0
12 [报告]
发表于 2010-08-18 14:10 |只看该作者
回复 11# zhaohongjian000

你把那个注释的一行去掉试试,我说了注释的一行去掉在我的环境下可以跑起来,没说一定在别的环境跑起来。

论坛徽章:
0
13 [报告]
发表于 2010-08-18 14:24 |只看该作者
malloc申请到的内存是没有保证被初始化为0的,当然也有一定机会是0.
你每次都可以,很大程度是因 ...
hellioncu 发表于 2010-08-18 12:03



    他说的是对的! 这个真和编译器不相干

论坛徽章:
0
14 [报告]
发表于 2010-08-18 15:12 |只看该作者
我的基础不行

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
15 [报告]
发表于 2010-08-27 11:00 |只看该作者
回复 1# wkq5325

这种问题, 研究可以, 但不能依赖……

malloc不是魔法, 最终也是向OS申请内存。
而OS申请的内存, 可能就是填0的, 理由如下:

比如window下, VirtualAlloc分配出来的都是全0。
mmap, sbrk不太了解。

抛开具体的OS, 从security来说。
OS也很有可能将新分配的物理页面填0, 以避免bad gay通过取巧手段获得其他进程的内存中的机密数据。


综上, OS给malloc的内存很可能是全0。
再加上存在一些内存分配算法, 仅改写这些新获得内存中的必要部分。
最终分配给用户的时候, 就是一些全0的block。


而vs的crt是会填写一些magic value, 好像是0xfd。

lz的gcc的libc可能就是完全不改写那些新获得内存的, 保持0不变。
—— 如果真是这样, 那重启进程多少次应该都是相同的结果。
可以改写程序, 先分配一个链表, 填一些值。 释放后再分配, 可能就不是全0了(也不能保证不是)。

还是那句话, 这些问题可以研究, 但最终写代码的时候, 没有特殊情况(比如连一个赋值都忍受不了) 不应该依赖这种行为。
实在需要大块的全0 block, 可以考虑直接向OS要, 或者用calloc。
有些calloc的实现是会利用OS的这个特性来优化的。

论坛徽章:
0
16 [报告]
发表于 2010-08-27 12:13 |只看该作者
无论怎样吧,我觉得有一个良好的编程习惯倒是最主要的。那样的话,就可以忽略很多有关平台的问题了。

论坛徽章:
0
17 [报告]
发表于 2010-08-28 00:33 |只看该作者
回复 15# OwnWaterloo
赞同,当时也就是觉得有点意思。谢谢

论坛徽章:
0
18 [报告]
发表于 2010-08-28 10:42 |只看该作者
这个是和编译器有关?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP