C语言学习:size_t

栏目: C · 发布时间: 5年前

内容简介:在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。size_t是一些C/C++标准在stddef.h中定义的。size_t的真实类型与操作系统有关:可以看到,在这里

在学习 C语言 的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。

size_t是一些C/C++标准在stddef.h中定义的。size_t的真实类型与操作系统有关:

#ifndef __SIZE_TYPE__
#ifdef _WIN64
#define __SIZE_TYPE__ long long unsigned int
#else
#define __SIZE_TYPE__ long unsigned int
#endif
#endif

可以看到,在这里

  • 64位架构中被定义为:long long unsigned int
  • 32位架构中被定义为:long unsigned int

size_t在32位架构上是4字节,在64位架构上是8字节,而int在不同架构下都是4字节,与size_t不同;且int为带符号数,size_t为无符号数。由于其是无符号的,所以其最大值在32位系统中是int的2倍,在64位系统中是4倍。

size_t 能存储理论上可行的任何类型(包括数组)对象的最大大小。size_t 通常用于数组下标和循环计数。比如将将unsigned int用作数组下标,可能会导致溢出。

C语言标准库里面经常会看到这样的函数:接收一个代表“字节大小”的值作为参数,或者返回一个代表“字节大小”的返回值。

// Declaration of various library function 
  
// Here argument of n refers maximum blocks that can be 
// allocated which is guaranteed to be non-negative 
void *malloc(size_t n); 
  
// While copying 'n' bytes from 's2' to 's1' 
// n must be non-negative integer 
void *memcpy(void *s1, void const *s2, size_t n); 
  
// strlen() use size_t because lengt of string has 
// to be atleast 0 
size_t strlen(char const *s);

其中:

  • 函数malloc(n),其中的参数n表示需要分配“多少字节”的内存大小。
  • 函数memcpy(s1, s2, n),其中的参数n表示需要复制的“字节大小”。
  • 函数strlen(s)的返回值表示字符串的“长度大小”。

表示大小为什么不直接用int类型,而非得搞个size_t?

以size_t strlen(char const *s)为例,由于字符串的长度永远不可能为负数,而int是允许负数的,有一半的数字被浪费了,明显用unsigned int会更好(同样的字节数),有效的数字多了一倍,从语义也更合理。那为什么不直接使用unsigned int?学过计算机组成原理应该不会对此有疑问。int小于等于数据线宽度,size_t大于等于地址线宽度。size_t存在的最大原因可能是因为:地址线宽度历史中经常都是大于数据线宽度的。目前的int普遍是32位,而size_t在主流平台中都是64位。因为无论int还是unsigned都很可能小于size_t需要的大小,所以必须有个size_t。

为什么要把类型命名为“size_t”?

sizeof()方法返回类型,表示一个size。所以从名字很直观能了解。C语言库自身使用typedef为那些可能依据C语言实验的不同而不同的类型创建类型名,这些类型的名字经常以_t结尾(_t的意思显然就是type),使用这样的命名方式主要是变量与类型共享同一个命名空间,因而需要在命名规则上刻意区分开来。比如ptrdiff_t、size_t、wchar_t。

  • wchar_t就是wide char type,“一种用来记录一个宽字符的数据类型”。
  • ptrdiff_t就是pointer difference type,“一种用来记录两个指针之间的距离的数据类型”。

参考链接:


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web标准之道

Web标准之道

阿一、棕熊、李战、丁学 / 人民邮电出版社 / 2009-8 / 35.00元

《Web标准之道:博客园精华集》由博客园知名博主联手打造,涉及Web标准、HTML/CSS、JavaScript、SEO优化等诸多领域,内容新颖,观点独特,妙语连珠。《Web标准之道:博客园精华集》并不是一本由代码和技巧堆积而成的集合,更多的是探讨了Web设计中若干理念和心得,其中多为经验之谈。无论对于从事Web前端设计的人士,还是对于那些从事Web后端编程的技术人员,《Web标准之道:博客园精华......一起来看看 《Web标准之道》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具