size_t

文章内容参考:

size_t 数据类型-CSDN博客

定义

是一些C/C++标准在stdef.h中定义的,其目的在于方便不同系统之间的移植。

size_t被用来表示C/C++中任何对象所能达到的最大长度,本身是无符号整数类型

size_t的声明是实现相关的,它出现在一个或多个标准头文件中,比如stdio.hstdlib.h,典型定义如下:

#ifndef _SIZE_T_
#define _SIZE_T_
typedef unsigned int size_t;
#endif

需要注意的是:在不同的系统上,size_t的定义可能不一样,在32位系统上定义为unsigned int,而在64位系统上定义为unsigned long,因此其长度并不固定,而是取决于平台,这是为了提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。

用途

size_t在数组下标内存管理函数之类的地方广泛使用。例如:

size_t被用作sizeof操作符的返回值类型。此外,它也是很多函数的参数类型,例如mallocstrlen

注意事项

  • size_t是无符号整数。
  • size_t的实际长度取决于具体实现,通常在32位系统上长度为32位,而在64位系统上长度为64位。一般来说,size_t的最大长度为SIZE_MAX

ssize_t

和size_t类似,唯一的区别在于ssize_t是有符号的。

16位、32位、64位机器的区别

char short int long long long 指针
16位 1B 2B 2B 4B 2B
32位 1B 2B 4B 4B 8B 4B
64位 1B 2B 4B 8B 8B 8B

编程中对于整数类型的注意事项

  • 为了保证平台的通用性,尽可能不使用long long,这是因为16位操作系统中long long不存在。
  • 在使用整数类型时,尽可能使用stdlib.h中定义的类型,它们是通过typedefint进行了定义,尽可能地避免了跨平台字长不同的问题:
    • int8_t : typedef signed char;
    • uint8_t : typedef unsigned char;
    • int16_t : typedef signed short ;
    • uint16_t : typedef unsigned short ;
    • int32_t : typedef signed int;
    • uint32_t : typedef unsigned int;
    • int64_t : typedef signed long long;
    • uint64_t : typedef unsigned long long;

intptr_t

在使用int时,也可以使用intptr_t来保证平台的流动性,它在不同的平台上编译时的长度不同,但都是标准的平台字长。例如在64位机器中,其长度为8字节;而在32位机器中,其长度为4字节。使用它可以安全地进行整数和指针之间的转换运算,也就是说:当需要使用指针作为整数运算时,将其转化为intptr_t进行运算才是安全的。

该类型定义于stddef.h头文件中:

#if _WORDSIZE == 64
	typedef long int intptr_t;
#else
	typedef long int intptr_t;
#endif

它也有相应的无符号类型:uintptr_t

posted @ 2024-02-17 20:45  BinaryPrinter  阅读(65)  评论(0编辑  收藏  举报