C语言 —— int32_t uint32_t 及size_t

article/2025/9/30 14:45:36

文章目录

    • int32_t和int区别
      • 使用原因
      • stdint.h源码
    • int32_t和uint32_t的区别
    • size_t
      • 在不同机器中定义不同:
      • stdint.h源码
    • 参考文档

int32_t和int区别

我们都知道,C语言的基本类型就char, short, int 等。但是我们在看其他源码时经常碰到int32_t, int8_t这种形式的定义,他们是什么呢。其实他们就是基本类型的typedef重定义。
也就是不同平台下,使用以下名称可以保证固定长度。
1字节 int8_t —— char
2字节 int16_t —— short
4字节 int32_t —— int
8字节 int64_t —— long long

使用原因

那么为何要用重定义来代替基本类型呢?
有些数据类型的确切字节数依赖于程序是如何被编译的。
比如数据类型 long —般在 32 位程 序中为4字节 ,在 64 位程序中则为8字节也就是说不同编译器下long的大小可能不同。

为了避免由于依赖“典型”大小和不同编译器设置带来的奇怪 行为, ISO C99 引人了一类数据类型 , 其数据大小是固定的 ,不随编译器和机器设置而变化。其中就有数据类型比如int32_t 和 int64_t, 它们分别为 4 个字节和 8 个字节。使用确定大小的整数类型是我们准确控制数据表示的最佳途径。

stdint.h源码

/* There is some amount of overlap with <sys/types.h> as known by inet code */
#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char                int8_t;
typedef short int                int16_t;
typedef int                        int32_t;
# if __WORDSIZE == 64
typedef long int                int64_t;
# else
__extension__
typedef long long int                int64_t;
# endif
#endif

可以看到,头文件stdint.h, 中long类型在把不同机器下被赋予不同的长度以保证,不同机器下int64_t的大小相同。

int32_t和uint32_t的区别

一个是有符号一个无符号,也就是一个可以有负数,而一个没负数,可取的正数范围更大。
在这里插入图片描述

size_t

size_t主要用于计数,他就是一个unsinged int的重定义. 如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数

在不同机器中定义不同:

在32位机器中定义为:typedef unsigned int size_t; (4个字节)
在64位机器中定义为:typedef unsigned long size_t;(8个字节)

使用 size_t 来代替 int 或 unsigned 可以保证在同一个平台中,始终得到得到一个数据类型或变量的字节大小,保证了程序对该数据类型或变量的统计方式始终一致,不会因为平台的改变而出现错误

他的目的和int64_t一样,也是为了平台一致性,他可以接住任何数组的index,在不同平台上size_t的定义也不同

size_t is a type that can hold any array index.

Depending on the implementation, it can be any of:

unsigned char

unsigned short

unsigned int

unsigned long

unsigned long long

stdint.h源码

size_t 的声明是实现相关的。它出现在一个或多个标准头文件中,比如stdio.h 和stblib.h,典型的定义如下:#ifndef __SIZE_T#define __SIZE_Ttypedef unsigned int size_t;#endif

参考文档

https://blog.csdn.net/yz930618/article/details/84785970
https://blog.csdn.net/weixin_32780623/article/details/112583862
https://blog.csdn.net/qq_30866297/article/details/51465473?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&utm_relevant_index=1
https://is-cloud.blog.csdn.net/article/details/106131564?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&utm_relevant_index=2


http://chatgpt.dhexx.cn/article/aRTKAOG1.shtml

相关文章

linux futex 进程同步,Linux的新式线程同步原语——Futex

在我的上一篇文章《本地POSIX线程库》http://www.linuxidc.com/Linux/2013-10/91409.htm 中&#xff0c;提到了Futex一词&#xff0c;发现好多读者误以为这是我的笔误&#xff0c;将Mutex错写为Futex了。其实Futex是Linux的一种全新的线程同步原语。本文将为您解读高效的Futex。…

futex同步机制分析之三内核实现

一、源码引入 前两篇从应用分析到了库&#xff0c;本篇到内核中看看&#xff0c;futex到底何方神圣&#xff1f;&#xff08;Linux3.1.1&#xff09; 先看一下futex.c和futex.h&#xff08;kennel/futex.c linux/futex.h&#xff09;: /*** struct futex_q - The hashed futex…

futex同步机制分析之一应用

futex同步机制分析之一应用 一、多线程&#xff08;进程&#xff09;的同步机制 c编程中最难的部分有哪些&#xff0c;估计绝大多数人都会首先提出来是多线程&#xff08;进程&#xff09;编程。为什么多线程编程难呢&#xff1f;一个主要的原因就是多线程的同步。在多线程同步…

FUTEX_SWAP补丁分析-SwitchTo 如何大幅度提升切换性能?

作者简介 胡哲宁&#xff0c;西安邮电大学计算机科学与技术专业大二学生。 Google SwitchTo 由于协程本身对操作系统的不可见性&#xff0c;协程中出现的 BUG 往往不能通过一些已有的工具去排查。在谷歌内部有一套闭源的用户态任务调度框架 SwitchTo, 这个框架可以为谷歌提供延…

futex问答

一、什么是futex&#xff1f; futex是Fast Userspace muTEX的缩写&#xff0c;该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入&#xff0c;虽然名字中有互斥锁&#xff08;mutex&#xff09;的含义&#xff0c;但实际它是一种用于用户空间…

Futex系统调用,Futex机制,及具体案例分析

Futex 1、背景1.1 自己实现锁1.1.1 自旋锁1.1.2 sleep自旋1.1.3 小结 1.2 futex1.2.1 什么是Futex1.2.2 futex诞生之前1.2.3 futex诞生之后 2、Futex系统调用3、Futex机制4、具体案例分析4.1 在Bionic中的实现4.2 C语言实现 5、参考及扩展阅读 首先要区分一下futex系统调用和fu…

深度讲解futex问答(上)

一、什么是futex&#xff1f; futex是Fast Userspace muTEX的缩写&#xff0c;该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入&#xff0c;虽然名字中有互斥锁&#xff08;mutex&#xff09;的含义&#xff0c;但实际它是一种用于用户空间…

数组中的字节数

##sizeof查看定义的数组所占用字节数 #include<iostream> int main(){using namespace std;int Inter [10];short sh [10];char ch [10];long lg [10];float fl [10];double dou [10];cout << "int style has " << sizeof Inter << " …

int转byte数组以及相关原理

前言 本文由int转byte数组这样的题目代码引发的思考&#xff0c;其中涉及到多个让我混淆的地方。 直接上代码 public byte[] toBytes(int number){byte[] bytes new byte[4];bytes[3] (byte)number;bytes[2] (byte) ((number >> 8) & 0xFF);bytes[1] (byte) ((…

java的byte数组的不同写法

经常看到java中对byte数组的不同定义&#xff0c;粗略整理的一下&#xff1a; 一个字节&#xff08;byte&#xff09;&#xff1d;8位&#xff08;bit&#xff09;&#xff0c;“byte数组”里面全部是“byte”&#xff0c;即每一个byte都可以用二进制、十六进制、十进制来表示。…

byte数组快速拷贝,byte数组合并,System.arraycopy详解

博客来源&#xff1a; 项目过程中用到byte[]数组相加问题&#xff0c;给出两个byte[] 需要合并成一个byte[]进行计算…那么需求来了……数据量达10W级&#xff0c;怎么合并 调用系统自带方法&#xff08;System.arraycopy&#xff09; 参考程序 org.junit.Test public void f…

程序、进程、线程的区别

程序、进程、线程的区别 进程是程序的实体&#xff0c;而线程又是进程的实体。进程又是线程的容器。 程序、进程、线程三者区别如下: 1.程序&#xff1a;程序并不能单独执行&#xff0c;是静止的&#xff0c;只有将程序加载到内存中&#xff0c;系统为其分配资源后才能够执…

操作系统-进程与线程的区别

操作系统-进程与线程的区别 1.什么是进程 简单的讲&#xff0c;进程是执行的程序&#xff0c;资源分配的最小单位。 进程包括&#xff1a;文本段&#xff08;程序代码&#xff09;、程序计数器的值、CPU寄存器的内容、堆、栈、数据段 进程的状态&#xff1a;新的、就绪、运行…

进程和线程的区别(重点)

来源&#xff1a;http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程&#xff0c;使得多线程程序的并发性高。 另外&#xff0c;进程在执行过程中拥有独立的内存单元&#xff0c…

进程与线程的区别和联系

程序并不能单独执行&#xff0c;只有将程序加载到内存中&#xff0c;系统为他分配资源后才能够执行&#xff0c;这种执行的程序称之为进程&#xff0c;也就是说进程是系统进行资源分配和调度的一个独立单位&#xff0c;每个进程都有自己单独的地址空间。所以说程序与进程的区别…

进程和线程的区别和联系

我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。 进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动…

进程与线程的区别及联系

目录 1. 操作系统功能简介 2. 进程 2.1 认识进程 2.2 进程操作系统中如何管理 2.3 PCB如何描述 2.3.1 pid 2.3.2 内存指针 2.3.3 文件描述符表 2.3.4 进程调度相关属性 3. 内存管理 4. 线程 4.1 认识线程 4.2 进程与线程的关系 4.3 线程安全问题 1.操作系统功能简…

Linux进程与线程的区别

进程与线程的区别&#xff0c;早已经成为了经典问题。自线程概念诞生起&#xff0c;关于这个问题的讨论就没有停止过。无论是初级程序员&#xff0c;还是资深专家&#xff0c;都应该考虑过这个问题&#xff0c;只是层次角度不同罢了。一般程序员而言&#xff0c;搞清楚二者的概…

win10安装时,提示“我们无法创建新的分区,也找不到现有分区”

win10安装时&#xff0c;提示“我们无法创建新的分区&#xff0c;也找不到现有分区”&#xff0c;如图所示&#xff1a; 解决办法&#xff1a; 将win10安装包&#xff08;ios文件&#xff09;解压&#xff0c;将以下文件复制到系统盘&#xff0c;然后重启电脑&#xff0c;自动…