size_t_梁斌_新浪博客

size_t_梁斌_新浪博客

size_t
(2012-10-10 19:12:39)
转载▼
标签:
杂谈
   
   今天我来讲讲size_t,借此来说明我的一些代码风格。
   我们都知道size_t这个是为移植性服务的,32位系统是32位无符号整形,64位系统是64位无符号整形。比如我举个例子
   A:
   size_t add_32_t(unsigned int op1, unsigned int op2)
   {
            return op1 + op2;
   }
   B:
   uint64_t add_32_t(uint32_t op1, uint32_t op2)
   {
            return op1 + op2;
   }
   再比如一个数据结构
   A:
   struct XXX  //这个XXX可以看作是一个可变长度的块的块头
   {
        char name[NAME_SIZE];
        size_t record_cnt   //record_cnt记录了record数组的大小
        YYY record[0]
   }
   B:
   struct XXX  //这个XXX可以看作是一个可变长度的块的块头
   {
        char name[NAME_SIZE];
        uint32_t record_cnt   //record_cnt记录了record数组的大小
        YYY record[0]
   }
    哪一种代码好呢?我喜欢带数字的整形类型的(stdint.h)中定义的,因为这个不用思考,我在编码的时候看到的是uint32_t,那么写这个代码的当事人就考虑了全部可能的溢出,size等问题。如果是size_t,那么这个头部的大小是不确定的(在不同系统中),而且溢出的情况也是不确定的。
  
    大家可以用facebook开源的folly代码,grep size_t *.h *.cpp 在grep一下 uint32_t 和 uint64_t就能体会出区别。
 
    有的人一天写30行代码,有的人一天写300行代码,如果你写得多,一定用一些简单,可靠的方法来保证尽可能的少犯错误,不要为什麽移植性来考虑,这个都是库函数程序员考虑的问题,我编码这么多年,要说遇到代码有移植性的这个需求的,也非常罕见,有几个人会把32位下的代码移植到64位上来,或者64位的移植到32位上,起码,我绝少遇到。
    最后在举个例子
    比如我在64位程序下写了这么个函数
    bool XXX(uint32_t xxx,uint32_t yyy){}
    那么这个函数移植到32位系统,其工作的结果也是你可以预期的,和64位一样
    但如果
    bool XXX(size_t xxx, size_t yyy){}
    这个函数移植到32位系统,运行结果也是可以预期的嘛?
    所以,同志们,我建议用确定的东西,不要用不确定的东西。不过你们也要独立思考,不要被我忽悠,我只是分享我的一些经验,也许是错误的,不合适的,但这个确实是合适我的,起码我放心。

posted on 2013-01-01 10:57  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2013/01/01/2841375.html

size_t_梁斌_新浪博客相关推荐

  1. 邓文迪撑杆跳,甩开老公要独立?_富杂志_新浪博客

    邓文迪撑杆跳,甩开老公要独立?_富杂志_新浪博客 邓文迪撑杆跳,甩开老公要独立? (2010-01-11 10:55:22) 转载▼

  2. cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客

    cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客 Cadence Allegro16.5详细安装具体的步骤 1.下载SPB16.5下来后,点setup.exe,先安装第一项 ...

  3. 关于幂律分布的一个笔记_哈克_新浪博客

    关于幂律分布的一个笔记_哈克_新浪博客 关于幂律分布的一个笔记     (2011-03-02 18:12:27)     转载▼     标签:     幂律     二八法则     杂谈     ...

  4. vim高级技巧(split)_小花_新浪博客

    vim高级技巧(split)_小花_新浪博客    :res(ize) +N 把当前窗口高度增加N个像素    :res(ize) -N 把当前窗口高度减少N个像素    :vertical res( ...

  5. 基于samba实现win7与linux之间共享文件_阳仔_新浪博客

    基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.

  6. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客

    Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客 Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf     (2009-07- ...

  7. 中国游客是否可以持中国驾照在美国自驾游?_游侠_新浪博客

    中国游客是否可以持中国驾照在美国自驾游?_游侠_新浪博客 中国游客是否可以持中国驾照在美国自驾游?

  8. 进口面料洗标大全_巧手缝纫_新浪博客

    进口面料洗标大全_巧手缝纫_新浪博客 进口面料洗标大全

  9. 公开课《夏季服装秀》_荔枝班_新浪博客

    公开课<夏季服装秀>_荔枝班_新浪博客 公开课<夏季服装秀>_荔枝班_新浪博客 公开课<夏季服装秀> posted on 2014-05-30 13:41  lex ...

最新文章

  1. wan886网址导航 Bo9bo高清电影 两个图标 怎么都删不掉
  2. [蓝桥杯]带分数-dfs
  3. java8 streams_当Java 8 Streams API不够用时
  4. 不能用蛮力法解决的问题_专家教授叫嚣:中国7亿农民只有一身蛮力,对国家没有作用...
  5. 【Elasticsearch】使用Elasticsearch中的copy_to来提高搜索效率
  6. 毕设日志——Linux服务器状态查询命令
  7. 什么时候使用Task.Delay,什么时候使用Thread.Sleep?
  8. 教你在Windows轻松修改Hosts文件
  9. 印度成不了下一个世界工厂,越南才可能
  10. 腾讯课堂后台扩容和性能优化实战
  11. java mis_关于使用java开发Mis系统的相关内容。
  12. android图标分组名称唯美简单可复制,扣扣分组名称简单唯美
  13. SH-SSS丨《端到端音视频说话人日志网络》论文线上分享
  14. [效率] HHKB键盘 + Autohotkey 配置秘籍
  15. android线程池!如何试出一个Android开发者真正的水平?内容太过真实
  16. canvas实现简单的画图功能
  17. Parameter index out of range (1 > number of parameters, which is 0)
  18. 全国主要城市经纬度表
  19. a 标签的 target 属性、描点链接
  20. 对手在开拓,苹果在“堕落”,创新路上,苹果还能走多远

热门文章

  1. 把opencv Mat 按位存成bmp二值图像 (1bit 1pixel)(位深度为1)
  2. 编程将一个整数分解成一个质因数的连乘积,并打印在屏幕上
  3. MT9V034摄像头学习笔记(三)
  4. lf模型下声门脉冲matlab程序,数字语音处理及MATLAB仿真.rar第二章
  5. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理(二)
  6. 四位数中有几个七C语言,用4、0和7可以组成(    )个不同的三位数,其中最大的数是(    ),最小的数是(     )。——青夏教育精英家教网——...
  7. 极速掌握HTML(一)基础入门
  8. 沙漏型悬浮芯体纸尿裤,爱宝宝就选择它
  9. 深入理解Spring----PostConstruct和PreDestroy
  10. 黑马案例学成在线网页的实现