闲聊c/c++: size_t、ptrdiff_t、socklen_t数据类型

本篇目的:

  • 了解size_t/ptrdiff_t这两个机器相关数据类型
  • 了解socklen_t数据类型
  • 这三个数据类型是为了跨平台而重新typedef的

闲聊c/c++之: 各平台下基本数据类型的字节长度一文中,我们总结了一张基本数据类型在各个平台中字节长度表:

各平台各编译器下基本类型字节长度表.png

根据上表,我们可以看到指针的字节长度:

  • 16 bit系统中,占用2字节(arduino nano)
  • 64 bit系统中,占用8字节(vc64/ios模拟器)
  • 32 bit系统中,占用4字节(除了上述3个系统外)

这种与机器类型相关的数据类型,我们可以称为机器相关数据类型


问: 现在有个需求,我需要跨平台的使用统一数据类型来表示指针地址范围,我该如何办?


答: 两种方式:

  • typedef long long int64;
    使用最大字节长度的数据类型来容纳各个平台下的地址数据

  • 使用c/c++预先定义的机器相关数据类型: size_t/ptrdiff_t

1. size_t/ptrdiff_t:

printf("size_t bytes = %d\n" ,sizeof(size_t));
printf("ptrdiff_t bytes = %d\n" ,sizeof(ptrdiff_t));
vc32_size_ptrdiff_socklen.png

vc64_size_ptrdiff_socklen.png

android_ndk_size_ptrdiff_socklen.png

nano_size_ptrdiff.png

esp32_size_ptrdiff.png

ios_size_ptrdiff_socklen.png

raspberrypi_size_ptrdiff_socklen.jpg

ubuntu_64_size_ptrdiff_socklen.jpg

为了编译器数据的完整性,更是为了android开发环境,服务器环境以及交叉编译树莓派,花了点时间安装了ubuntu 64 操作系统,整个安装过程我都视频录制下来了。等我剪辑好后放上来。正在逐渐从windows开发转向linux开发,一起学习


  • 的确如此,size_t/ptrdiff_t数据类型是和机器相关的。其sizeof字节长度和指针字节长度是一致的。

  • size_t/ptrdiff_t之间的区别如下(以windows定义为例,其他系统一样):

win_size_ptrdiff_define.png

size_t 是无符号(unsigned)整数,而ptrdiff_t是有符号整数

  • size_t更适合表达指针地址值。指针地址取值范围 = size_t取值范围。

  • ptrdiff_t从字面意思就能知道: 两个指针地址(无正负)差(有正负)

我们知道,指针之间具有加减操作,表示指针的移动

void printChineseStringPtrdiff()
{
    char str[] = "随风而行之青衫磊落险峰行";
    char *pstart = str;
    char *pend = str + strlen(str);
    ptrdiff_t difp = pend - pstart;
    printf("%d\n", difp);
}

上述代码在vc32/64中输出24,提出两个问题:

  1. 在vc32/64中,为什么是24个字节?
  2. 在ios/android/linux中,上述代码的ptrdiff_t是36,为什么和vc32/64的ptrdiff不一致?

2. socklen_t:

  • windows下定义在头文件:#include<ws2tcpip.h>中
  • ios/linux定义在头文件: #include <sys/socket.h>中
  • android ndk中,定义为__socklen_t而不是socklen_t
  • socklen_t必须要和当前机器的int类型具有一致的字节长度,根据上面几张图,不管是32/64位系统,socklen_t都是4byte

更新我们闲聊c/c++之: 各平台下基本数据类型的字节长度中的表格:

type vc32 vc64 android arduino nano esp32 树莓派 ios ubuntu64
char 1 1 1 1 1 1 1 1
short 2 2 2 2 2 2 2 2
int 4 4 4 2 4 4 4 4
long 4 4 4 4 4 4 8 8
long int 4 4 4 4 4 4 8 8
long long 8 8 8 8 8 8 8 8
float 4 4 4 4 4 4 4 4
double 8 8 8 4 8 8 8 8
long double 8 8 8 4 8 8 16 16
bool 1 1 1 1 1 1 1 1
wchar_t 2 2 4 2 2 4 4 4
pointer 4 8 4 2 4 4 8 8
size_t 4 8 4 2 4 4 8 8
ptrdiff_t 4 8 4 2 4 4 8 8
socklen_t 4 4 4 没找到 4 4 4
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,936评论 6 13
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,950评论 1 13
  • 在线教学网站: 慕课网 极客学院 麦子学院 「慕课网」慕课网主页 慕课网是一家从事互联网在线教学的网络教育企业...
    比萨u阅读 260评论 0 2
  • 我特别欣赏一些人,有自己的观点,不干涉别人怎么说,内心强大的没有谁能控制自己的情绪,好像只要他想做的那么一定会做到...
    难又难ML阅读 412评论 0 0
  • 前两个小相框忘了拍,成品,换了背景纸和图片,这个大的相框决定放些布块,总有那么几块布印象深刻或者意义非凡。 先弄干...
    漫与手工阅读 474评论 0 0