size_t和ssie_t的区别

  网上有一篇非常详细的寻找定义的过程,自己也做了做。

  过程: 1.先在/usr/include/i386-linux-gun找到

       #ifndef __ssize_t _defined     typedef __ssize_t ssize_t

     2.文件中再没有相关线索,但是有#include <bits/types.h> , 查看。

         找到  __STD_TYPE__SSIZE_T_TYPE  __ssize_t

      其中该文件有 #define  __STD_TYPE  __extension__ typedef

      所以 __STD_TYPE__SSIZE_T_TYPE  __ssize_t就相当于:

       typedef  __SSIZE_T_TYPE  __ssize_t

     3.文件中有头文件 #include <bits/typesize.h>  /*Defines __*_T_TYPE macros */

     4.  查看typessize.h,找到 #define  __SSIZE_T_TYPE   __SWORD_TYPE 

     5. 到目前位置,结果就是最初的  typedef __ssize_t ssize_t  相当于 typedef  __SWORD_TYPE ssize_t.       

      6.在bits/types.h  中

        

 1 #if __WORDSIZE == 32
 2 # define __SQUAD_TYPE     __quad_t
 3 # define __UQUAD_TYPE     __u_quad_t
 4 # define __SWORD_TYPE     int
 5 # define __UWORD_TYPE     unsigned int
 6 # define __SLONG32_TYPE     long int
 7 # define __ULONG32_TYPE     unsigned long int
 8 # define __S64_TYPE     __quad_t
 9 # define __U64_TYPE     __u_quad_t
10 /* We want __extension__ before typedef‘s that use nonstandard base types
11 such as `long long‘ in C89 mode. */
12 # define __STD_TYPE     __extension__ typedef
13 #elif __WORDSIZE == 64
14 # define __SQUAD_TYPE     long int
15 # define __UQUAD_TYPE     unsigned long int
16 # define __SWORD_TYPE     long int
17 # define __UWORD_TYPE     unsigned long int
18 # define __SLONG32_TYPE     int
19 # define __ULONG32_TYPE     unsigned int
20 # define __S64_TYPE     long int
21 # define __U64_TYPE     unsigned long int
22 /* No need to mark the typedef with __extension__. */
23 # define __STD_TYPE     typedef
24 #else
25 # error
26 #endif

所以结果就是,ssize_t 在32位机器相当于int (4bytes) , 在64位相当于long int  (8bytes)

而size_t 就是无符号的ssize_t  , 在32位机器上 是 unsigned int /unsigned long (根据编译器而定, 但都是32位),

在64位机器上就是64位的。

时间: 2024-08-29 16:22:08

size_t和ssie_t的区别的相关文章

【c++】size_t 和 size_type的区别

为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 2. string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int3. 使用的时候可以参考:   string

size_t 和 size_type的区别

为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 2. string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int3. 使用的时候可以参考:   string

size_t和unsigned int区别

size_t和unsigned int有所不同,size_t的取值range是目标平台下最大可能的数组尺寸,一些平台下size_t的范围小于int的正数范围,又或者大于unsigned int.最典型的,在x64下,int还是4,但size_t是8.这意味着你在x64下最大可能开辟的数组尺寸是2^64.如果你使用int或者unsigned int,那么在x64下如果你的代码中全部使用uint作为数组的尺寸标记,那么你就会失去控制2^32尺寸以上的数组的机会.虽然现在在x64上开辟一个大于2^32

C语言 string::size_type类型

string::size_type类型 从逻辑上来讲,size()成员函数似乎应该返回整型数值,或如2.2节"建议"中所述的无符号整数.但事实上,size操作返回的是string::size_type类型的值.我们需要对这种类型做一些解释. string类类型和许多其他库类型都定义了一些伙伴类型(companion types).这些伙伴类型使得库类型的使用是机器无关的(machine-independent).size_type就是这些伙伴类型中的一种.它定义为与unsigned型(

C++ string::size_type 类型【转】

1 int main() 2 { 3 string str("Hello World!\n"); 4 cout << "The size of " << str << "is " << str.size() 5 << " characters, including the newline" << endl; 6 return 0; 7 } 从逻辑上来讲,s

20155317 《信息安全系统设计基础》第十三周周学习总结

20155317 <信息安全系统设计基础>第十三周周学习总结 一.UNIX I/O 在UNIX系统中有一个说法,一切皆文件.所有的I/O设备,如网络.磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行.这种将设备映射为文件的方式,允许UNIX内核引出一个简单.低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行. 打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作

size_type 和 size_t 的区别

标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下:string st("The expense of spirit\n");cout << "The size of "<<st<<"is"<<st.size() << "characters, including the newline"<<endl;那么size()这个函数

size_t与size_type区别

size()  标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下: string st("The expense of spirit\n");cout << "The size of "<<st<<"is"<<st.size()<< "characters, including the newline"<<endl; 那么s

谈谈redis,memcache的区别和具体应用场景

时间:2016 十月 12 1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失.Memcached使用C语言开发,在大多数像Linux.BSD和Solaris等POSIX系统上,只要安装了libevent即可使用.在Windows下,它也有一个可用的非官方版本(http