size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。

例如:bitset的size操作返回bitset对象中二进制位中1的个数,返回值类型是size_t。

例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。vector使用的下标实际也是size_t,源码是typedef size_t size_type。

中文名

size_t

外文名

unsigned int定    义

在cstddef头文件中

64位系统中

long long unsigned int

size_t来源

编辑

size_t是标准C库中定义的,在64位系统中为long long unsigned int,非64位系统中为long unsigned int。

数据类型"socklen_t"和int应该具有相同的长度,否则就会破坏BSD套接字层的填充。POSIX开始的时候用的是size_t,Linus Torvalds(他希望有更多的人,但显然不是很多)努力向他们解释使用size_t是完全错误的,因为在64位结构中 size_t和int的长度是不一样的,而这个参数的长度必须和int一致,因为这是BSD套接字接口标准。最终POSIX的那帮家伙找到了解决的办法,那就是创造了一个新的类型"socklen_t"。Linus Torvalds说这是由于他们发现了自己的错误但又不好意思向大家伙儿承认,所以另外创造了一个新的数据类型 。

size_t使用

编辑

一个基本的无符号整数的C / C + +类型,它是sizeof操作符返回的结果类型,该类型的大小可选择。因此,它可以存储在理论上是可能的任何类型的数组的最大大小。换句话说,一个指针可以被安全地放进为size_t类型(一个例外是类的函数指针,但是这是一个特殊的情况下)。 size_t类型通常用于循环、数组索引、大小的存储和地址运算。虽然size_t可以存储一个指针,它的目的是更好地使用另一个unsigned整数类型uintptr_t。在某些情况下,使用size_t类型是更为有效,比习惯性使用无符号类型的程序会更安全。

size_t是在基于无符号整数memsize类型的C / C + +的标准库中定义的。C语言中,此类型位于头文件stddef.h中,而在C++中,则位于cstddef中。

size_t实现方式

编辑

在C++中,设计size_t 就是为了适应多个平台的。size_t的引入增强了程序在不同平台上的可移植性。size_t是针对系统定制的一种数据类型,一般是整型,因为C/C++标准只定义一最低的位数,而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定义这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。经测试发现,在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。

size_t详细解释

编辑

size_t在C语言中就有了。

它是一种“整型”类型,里面保存的是一个整数,就像int、long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。

通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。

因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。

类似的还有wchar_t, ptrdiff_t。

wchar_t就是wide char type,“一种用来记录一个宽字符的数据类型”。

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

通常,size_t和ptrdiff_t都是用typedef来实现的。你可能在某个头文件里面找到类似的语句:

typedef unsigned int size_t;

而wchar_t则稍有不同。在一些旧的编译器中,wchar_t也可能是用typedef来实现,但是新的标准中wchar_t已经是C/C++语言的关键字,wchar_t类型的地位已经和char, int的地位等同了。

在标准C/C++的语法中,只有int float char bool等基本的数据类型,至于size_t或size_type都是以后的编程人员为了方便记忆所定义的一些便于理解的由基本数据类型的变体类型。

例如:typedef int size_t;定义了size_t为整型。

size_t示例代码

编辑

int i;//定义一个int类型的变量i

size_t size = sizeof(i);//用sizeof操作得到变量i的类型的大小

//这是一个size_t类型的值

//可以用来对一个size_t类型的变量做初始化

i = (int)size;//size_t类型的值可以转化为int类型的值

char c = 'a';//c保存了字符a,占一个字节

wchar_t wc = L'a';//wc保存了宽字符a,占两个字节

//注意'a'表示字符a,L'a'表示宽字符a

int arr[] = {1,2,3,4,5};//定义一个数组

int *p1 = &arr[0];//取得数组中元素的地址,赋值给指针

int *p2 = &arr[3];

ptrdiff_t diff = p2-p1;//指针的减法可以计算两个指针之间相隔的元素个数

//所得结果是一个ptrdiff_t类型

i = (int)diff;//ptrdiff_t类型的值可以转化为int类型的值

android size_t在哪个头文件,size_t相关推荐

  1. android studio生成Jni头文件 java10,java11删除了javah,改用javac直接用源码生成jni头文件。 java8是用javah

    android studio生成Jni头文件 鼠标放本地方法上去,点提示来创建. java10,java11及以上   生成jni头文件 java10,java11删除了javah.改用javac直接 ...

  2. 没有android手机确切内核头文件,绕过模块的版本检查,构建一个内核模块

    有一次不小心把我的乐1pro(x800+)掉地上了,屏幕碎的很惨.现在乐视都倒了,这机器的配置也跟不上了,不值得换屏,但电容屏碎了也能操作,就像废物利用,做个下载器.但下载到手机再转存到nas上太麻烦 ...

  3. 【Android 内存优化】libjpeg-turbo 函数库交叉编译与使用 ( 交叉编译脚本编写 | 函数库头文件拷贝 | 构建脚本配置 | Android Studio 测试函数库 )

    文章目录 一.交叉编译 Shell 脚本参考 二.NDK r16b 版本配置 三.libjpeg-turbo 交叉编译 Shell 脚本 四.执行 libjpeg-turbo 交叉编译 Shell 脚 ...

  4. sizeof 头文件_c/c++基础之sizeof用法

    在 C/C++ 中,sizeof() 是一个判断数据类型或者表达式长度的运算符. 1 sizeof 定义 sizeof 是 C/C++ 中的一个操作符(operator),返回一个对象或者类型所占的内 ...

  5. c语言 fscanf的头文件,fscanf函数在哪个头文件中

    SizeOf Pascal的一种内存容量度量函数: 用法: Var a : array[1..10000] of longint; Begin Writeln(SizeOf(a)); End. 输出: ...

  6. NDK中C++标准库、STL的配置;Include其他头文件

    原文: Android学习笔记--NDK中C++标准库.STL的配置:Include其他头文件 1.STL的使用,以stlport为例 官方的说法是只需要在Application.mk文件中添加如下一 ...

  7. 解决javah生成c头文件时找不到android类库的问题

    解决javah生成c头文件时找不到android类库的问题 参考文章: (1)解决javah生成c头文件时找不到android类库的问题 (2)https://www.cnblogs.com/liul ...

  8. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

    文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...

  9. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

最新文章

  1. 【天命奇御】成就进度62/71的通关攻略(1·开篇前言)
  2. 神经网络php代码,慢慢研究
  3. 009_html标准属性
  4. 54include对象
  5. 从卓越工程的角度看微软中国开发团队的成长 (一)
  6. AttributeError: module ‘tensorflow‘ has no attribute ‘xxx‘
  7. 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting、模型融合
  8. Javase基础思维导图
  9. Java 后台 google地图通过经纬度寻找地址
  10. Sloth演示程序及源代码发布
  11. 萨达阿萨德发送到在线橙V
  12. 利用c++深究周立功usbcan盒的学习
  13. WEB前端 VS 后端,学哪个就业前景更好
  14. GMAC接口(2)——协议
  15. swoole-面向连接(tcp)的心跳检测和合包分包
  16. 阿里达摩院发布2019十大科技趋势:AI、区块链等入选-千氪
  17. 猛兽来袭——Integral Protocol
  18. oracle-表创建
  19. 计算机高级筛选操作步骤,计算机操作:高级筛选和透视表(范文).doc
  20. Fmoc-Lys (biotin-PEG4)-OH,1334172-64-3生物素标记的、基于PEG的PROTAC连接物

热门文章

  1. Java整数缓存-为什么Integer.valueOf(127)== Integer.valueOf(127)为True
  2. Spring Boot集成测试中@ContextConfiguration和@SpringApplicationConfiguration之间的区别
  3. 如何避免Java线程中的死锁?
  4. 将可见的电子签名添加到PDF
  5. 使用JCache缓存方法结果
  6. 使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java
  7. 平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
  8. 在CockroachDB上运行Flowable
  9. 默认HotSpot最大直接内存大小
  10. Java 8 Streams:过滤和谓词否定