因为用的比较多,所以我决定整理一下size_t的知识点。
其实说白了就是一种数据类型,在标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。
size_t为什么麻烦呢,因为它引起了我程序的问题,也是一种玄学的bug:Typename is not allowed.
这个报错经常是与size_t一起出现的,所以当发现这个错误时,就必须弄懂size_t的真正含义。
一个基本的
无符号整数的C / C + +类型, 它是sizeof操作符返回的结果类型, 该类型的大小是选择。因此,它可以存储在理论上是可能的任何类型的
数组的最大大小。 换句话说,一个
指针可以被安全地放进为size_t类型(一个例外是类的
函数指针,但是这是一个特殊的情况下)。 size_t类型通常用于循环、数组索引、大小的存储和地址运算。 虽然size_t可以存储一个指针,它的目的是更好地使用另一个unsigned整数类型uintptr_t形式。 在某些情况下,使用size_t类型是更为有效,比习惯性使用无符号类型的程序会更安全。
由于不同的系统中,内存对数的高位存储和低位存储都不一样,所以有必要提供一种好的移植方式,而size_t的特性就特别适合。
因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。
类似的还有wchar_t, ptrdiff_t。
wchar_t就是wide char type,“一种用来记录一个宽字符的数据类型”。
ptrdiff_t就是pointer difference type,“一种用来记录两个指针之间的距离的数据类型”。
再由于size_t可安全存放指针,CUDA里Device里都是指针在做基本操作,所以在CUDA里大量使用size_t也很正常啦。