size_t详细解释
博客为什么没人用了在学习sizeof运算符的时候,它的值类型为size_t,结果在使⽤printf函数显⽰的时候,凭空多了很多警告,有点不不理解,为啥搞这么复杂?直接⽤个int类型多省事?
经过⼀番搜索和阅读⽂档,到了答案,总结如下:
问题1:为啥不⽤int⽽是size_t这么古怪的类型,搞出好多类型不匹配的警告?
答:⼀个共识是:int类型⼀般⼩于等于数据线的宽度,⽽size_t类型⼀般为⼤于等于地址线宽度。⽽地址线宽度常常是⼤于数据线宽度的。
在数据只有8位的年代,地址率先进⼊10位,12位,在数据16位的年代,地址也已经进⼊了20位,24位。⽬前的int普遍是32位,⽽地址线宽度在主流平台中都是64位。
size_t为什么存在?因为⽆论int还是unsigned都很可能⼩于地址线宽度需要的⼤⼩,所以必须有个size_t。
问题2:为什么size_t后⾯要什么有个_t?
答:_t的意思就是type。关于为什么要加_t。⼀个类型后⾯加了_t说明了这是⼀个POSIX或GNU保留类型,防⽌命名空间污染(namespace pollution)。
不然标准库⾥新加了什么类型说不定就和⽤户已经定义的类型重名了。所以POSIX规定⾃⼰扩展的类型都加_t,这样只要⽤户定义类型的时候不加_t就不会冲突。