免费注册 查看新帖 |

Chinaunix

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

[C] 请教C语言牛人----关于int与unsigned int的奇怪问题 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
71 [报告]
发表于 2010-06-13 23:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
72 [报告]
发表于 2010-06-13 23:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
73 [报告]
发表于 2010-06-13 23:54 |只看该作者
回复 69# 没本
很同情你!
某位和B大神有一拼!
您就甭浪费时间了。

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

这叫搪塞?  这叫不自以为是
还真以为全世界都是用的和你相同的机器与相同的编译器?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
75 [报告]
发表于 2010-06-13 23:58 |只看该作者
以前写过一段程序在x86上运行的很好,在arm上就是不对。
也是看汇编指令发现是非对齐访问的问题。
C语 ...
guoruimin 发表于 2010-06-13 23:44


在看汇编之前, 为什么不看看你的代码里是否有不安全的转型操作?
例如:

  1. char* pc = (char*)malloc( ... );
  2. int* pi = (int*)&pc[1];
复制代码
就这个问题, 不需要深入到汇编, 就在C语言层次就可以解决。

论坛徽章:
0
76 [报告]
发表于 2010-06-13 23:58 |只看该作者
回复 73# guoruimin


    务实的人解决问题,务虚的人制造问题,谈不到一块去。

论坛徽章:
0
77 [报告]
发表于 2010-06-14 00:05 |只看该作者
本帖最后由 没本 于 2010-06-14 00:47 编辑

&pid回复 75# OwnWaterloo


    malloc()也不能保证页对齐,只能保证4字节或者8字节对齐。需要页对齐用valloc()/memalign()。一些调用传地址必须页对齐,以避免缺页中断。

论坛徽章:
0
78 [报告]
发表于 2010-06-14 00:08 |只看该作者
本帖最后由 guoruimin 于 2010-06-14 00:28 编辑
在看汇编之前, 为什么不看看你的代码里是否有不安全的转型操作?
例如:就这个问题, 不需要深入到汇 ...
OwnWaterloo 发表于 2010-06-13 23:58

说的是通过汇编,发现的问题。

有的时候是不可能对齐的。
typedef struct packet_t {
    unsigned char  type;
    unsigned char  cmd;
    unsigned int   param;
    unsigned short len;
    unsigned char  buf[];
} packet_t;
只能针对不同的编译器加不同的对齐参数。

有一些问题,如没遇到过,不汇编调试很难发现。

C 标准初学时了解一下,掌握住概念就行了,真把它当救命稻草,或用它来糊弄人,就太可笑了。
至于只想封闭的掌握 C 语言,估计做做习题没问题!

论坛徽章:
0
79 [报告]
发表于 2010-06-14 00:28 |只看该作者
本帖最后由 没本 于 2010-06-14 00:39 编辑
他们没有(至少我没有看到)用汇编去解释C语言的行为, 通过汇编学习C语言
他们也知道只有绝对有必要的时候 ...
pmerofc 发表于 2010-06-13 23:23



    内核程序员没有在调试内核时完全不看自己源码生成的汇编的,不过你完全有希望成为第一个遵守“C语言封闭完备集定律”的内核程序员。

论坛徽章:
0
80 [报告]
发表于 2010-06-14 00:38 |只看该作者
回复  没本

这叫搪塞?  这叫不自以为是。
还真以为全世界都是用的和你相同的机器与相同的编译器?
OwnWaterloo 发表于 2010-06-13 23:55



    正是因为有这些差异性,以及这些差异性造成的差别,所以才需要看编译器产生的代码,来找出造成某台机器能用,而且另一台却用不了,这类问题的原因。
而看C源码,你是很难找出(猜出)原因来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP