当前位置: 首页 > news >正文

国家企业信息查询网站河南小学网站建设

国家企业信息查询网站,河南小学网站建设,装饰设计素描的秩序化构成包括,重庆专业微网站建设参考#xff1a;https://www.zhihu.com/question/24773728/answer/66535663前言#xff1a;使用size_t可能会提高代码的可移植性、有效性或者可读性#xff0c;或许同时提高这三者。在标准C库中的许多函数使用的参数或者返回值都是表示的用字节表示的对象大小#xff0c;比…参考https://www.zhihu.com/question/24773728/answer/66535663  前言使用size_t可能会提高代码的可移植性、有效性或者可读性或许同时提高这三者。  在标准C库中的许多函数使用的参数或者返回值都是表示的用字节表示的对象大小比如说malloc(n) 函数的参数n指明了需要申请的空间大小还有memcpy(s1, s2, n)的最后一个参数表明需要复制的内存大小strlen(s)函数的返回值表明了以’\0’结尾的字符串的长度不包括’\0’其返回值并不是该字符串的实际长度因为要去掉’\0’。  或许你会认为这些参数或者返回值应该被申明为int类型或者long或者unsigned但是事实上并不是。C标准中将他们定义为size_t。标准中记载malloc的申明应该出现在定义为void *malloc(size_t n);  memcpy和strlen的申明应该出现在中void *memcpy(void *s1, void const *s2, size_t n);size_t strlen(char const *s);  size_t还经常出现在C标准库中此外C库中经常会使用一个相似的类型size_type用的可能比size_t还要多。  据我所知大部分的C和C程序员害怕这些库使用size_t因为他们不知道size_t代表什么或者为什么这些库需要使用它归根结底原因在于他们什么时候什么地方需要用到它。可移植性问题  早期的C语言由Brian Kernighan 和 Dennis Ritchie 在The C Programming Language书中所写Prentice-Hall, 1978并没有提供size_t类型C标准委员会为了解决移植性问题将size_t引入举例如下  让我们来写一个可移植的标准memcpy函数我们将会看到一些不同的申明和它们在不同平台不同大小的地址空间上编译下的情况。  回忆memcpy(s1, s2, n)函数它将s2指向地址开始的n个字节拷贝到s2指向的地址返回s1这个函数可以拷贝任何数据类型所以参数和返回值的类型应该为可以指向任何类型的void*同时源地址不应该被改变所以第二个参数s2类型应该为const void*这些都不是问题。  真正的问题在于我们如何申明第三个参数它代表了源对象的大小我相信大部分程序员都会选择intvoid *memcpy(void *s1, void const *s2, int n);  使用int类型在大部分情况下都是可以的但是并不是所有情况下都可以。int是有符号的它可以表示负数但是大小不可能是复数。所以我们可以使用unsigned int代替它让第三个参数表示的范围更大。  在大部分机器上unsigned int的最大值要比int的最大值大两倍比如说再也给16位的机器上unsigned int的最大值为65535int的最大值为32767。  尽管int类型的大小依赖于C编译器的实现但是在给定的平台上int对象的大小和unsigned int对象的大小是一样的。因此使用unsigned int修饰第三个参数的代价与int是相同的void *memcpy(void *s1, void const *s2, unsigned int n);   这样似乎没有问题了unsigned int可以表示最大类型的对象大小了这种情况只有在整形和指针类型具有相同大小的情况下比如说在IP16中整形和指针都占2个字节16位而在IP32上面整形和指针都占4个字节32位。参见下面C数据模型表示法C数据模型表示法  最近我偶然发现几篇文章他们使用简明的标记来表述不同目标平台下c语言数据的实现。我还没有找到这个标记的来源正式的语法甚至连名字都没有但他似乎很简单即使没有正规的定义也可以很容易使用起来。这些标记的一边形式形如  I nI L nL LL nLL P nP。   其中每个大写字母或成对出现代表一个C的数据类型每一个对应的n是这个类型包含的位数。I代表intL代表longLL代表long long以及P代表指针指向数据而不是函数。每个字母和数字都是可选的。   例如I16P32架构支持16位int和32位指针类型没有指明是否支持long或者long long。如果两个连续的类型具有相同的大小通常省略第一个数字。例如你可以将I16L32P32写为I16LP32这是一个支持16位int32位long和32位指针的架构。   标记通常把字母分类在一起所以可以按照其对应的数字升序排列。例如IL32LL64P32表示支持32位int32位long64位long long和32位指针的架构然而通常写作ILP32LL64。   不幸的是这种memcpy的申明在I16LP32架构上整形是16-bit 长整形和指针类型时32-bits显得不够用了比如说摩托罗拉第一代处理器68000在这种情况下处理器可能拷贝的数据大于65535个字节但是这个函数第三个参数n不能处理这么大的数据。  什么你说很容易就可以改正只需要把memcpy的第三个参数的类型修改一下void *memcpy(void *s1, void const *s2, unsigned long n);   你可以在I16LP32目标架构上使用这个函数了它可以处理更大的数据。而且在IP16和IP32平台上效果也还行说明它确实给出了memcpy的一种移植性较好的申明。但是在IP16平台上相比于使用unsigned int你使用unsigned long可能会使你的代码运行效率大打折扣代码量变大而且运行变慢。  在标准C中规定长整形无论无符号或者有符号至少占用32位因此在IP16平台上支持标准C的话那么它一定是IP16L32 平台。这些平台通常使用一对16位的字来实现32位的长整形。在这种情况下移动一个长整形需要两条机器指令每条移动一个16位的块。事实上这个平台上的大部分的32位操作都需要至上两条指令。  因此以可移植性为名将memcpy的第三个参数申明为unsigned long而降低某些平台的性能是我们所不希望看到的。使用size_t可以有效避免这种情况。  size_t类型是一个类型定义通常将一些无符号的整形定义为size_t比如说unsigned int或者unsigned long甚至unsigned long long。每一个标准C实现应该选择足够大的无符号整形来代表该平台上最大可能出现的对象大小。使用size_t  size_t的定义在stddef.h, stdio.h, stdlib.h, string.h, time.h和wchar.h这些标准C头文件中也出现在相应的C头文件, 等等中你应该在你的头文件中至少包含一个这样的头文件在使用size_t之前。   包含以上任何C头文件由C或C编译的程序表明将size_t作为全局关键字。包含以上任何C头文件当你只能在C中做某种操作时表明将size_t作为std命名空间的成员。   根据定义size_t是sizeof关键字注sizeof是关键字并非运算符运算结果的类型。所以应当通过适当的方式声明n来完成赋值n sizeof(thing);  考虑到可移植性和程序效率n应该被申明为size_t类型。类似的下面的foo函数的参数也应当被申明为sizeoffoo(sizeof(thing));  参数中带有size_t的函数通常会含有局部变量用来对数组的大小或者索引进行计算在这种情况下size_t是个不错的选择。   适当地使用size_t还会使你的代码变得如同自带文档。当你看到一个对象声明为size_t类型你马上就知道它代表字节大小或数组索引而不是错误代码或者是一个普通的算术值。   在我接下来的一些文章的例子中会使用size_t敬请期待 转载于:https://www.cnblogs.com/xiaochouk/p/9310498.html
http://www.pierceye.com/news/47376/

相关文章:

  • 网站推广教学城乡建设部网站首页上海
  • 网站推广和优化的原因百度关键词优化公司
  • 要建设企业网站安卓是哪里开发的
  • 济南做企业网站的公司网页无法访问怎么解决
  • 兼职20网站开发用腾讯云做淘宝客购物网站视频
  • 方又圆网站建设长春的网站建设
  • 网站建设图片手机wordpress 显示当前分类
  • 可以免费做网站推广的平台定制东莞网站制作公司
  • 网站设计宁波做网上水果网站的调查
  • 淘客网站是怎么做的网站开发制作流程
  • 无锡网站建设优化公司网站优化成都哪里好
  • 给人做ppt的网站吗通辽网站开发
  • 保健品做哪个网站好vs网站怎么做
  • 卡尺 东莞网站建设wordpress固定链接 404
  • 怎么知道哪家公司网站做的好开元棋牌网站怎么做
  • 创意网站建设莱芜受欢迎的网站建设
  • 网站群管理建设工程建设指挥部网站
  • 网站建设图片设置网络营销产品策略树状图
  • 学会建设网站必要性电商货源网站
  • 网站建设模板怎么做论坛备案网站名称
  • 网站建设优秀网节约化网站群建设情况
  • 一般网站的宽度是多少像素wordpress主题使用帮助
  • 网站网络结构设计wordpress4.9多个主题
  • WordPress文章数据转emlog百度推广怎么优化关键词的质量
  • 广东商城网站建设网站运营每天做啥工作
  • 制作网站的程序临海房产中介网站如何制作
  • 网站推广销售安徽六安什么时候解封
  • 网站项目开发收费标准免费制作手机app
  • 宁波人流网整站seo公司
  • 宜兴市建设局网站商丘创小资网络有限公司