size_t是如何增强程序的可移植性的?

时间:2023-01-09 22:00:36
如题,大神们最好能举个例子方便理解,在我看来就是定义了不同位数的机器上的最大无符号数,对程序的移植有什么影响实在想不到了。

8 个解决方案

#1


这个通常用于系统API,关于内存操作的通常都是size_t,因为64和32位支持的地址范围不同,就像void *malloc(size_t size);一样,之所以不是int size或者uint64_t size,就是因为这是平台相关的。

#2


学习了, size_t是如何增强程序的可移植性的?

#3


32位:
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;

#4


引用 1 楼 qq120848369 的回复:
这个通常用于系统API,关于内存操作的通常都是size_t,因为64和32位支持的地址范围不同,就像void *malloc(size_t size);一样,之所以不是int size或者uint64_t size,就是因为这是平台相关的。


那为什么不都用long unsigned int呢,long unsigned int不也是平台相关的吗,干嘛要多定义个size_t?在32位系统中,字节数为4字节;在64位系统中,Visual C++和Mingw64字节数为4字节。GCC(POSIX系统以及Cygwin)为8字节。

#5


引用 3 楼 zhao4zhong1 的回复:
32位:
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;


定义是没错,但是对移植性的影响是什么呢?赵老师方便的话能举个例子吗

#6


赵老湿说的就是例子啊,比如定义结构体里面用size_t。

#7


你自己的陈述就是例子。

如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。

#8


引用 7 楼 ForestDB 的回复:
你自己的陈述就是例子。

如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。


明白了。谢谢了啊,有点钻牛角尖了可能

#1


这个通常用于系统API,关于内存操作的通常都是size_t,因为64和32位支持的地址范围不同,就像void *malloc(size_t size);一样,之所以不是int size或者uint64_t size,就是因为这是平台相关的。

#2


学习了, size_t是如何增强程序的可移植性的?

#3


32位:
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;

#4


引用 1 楼 qq120848369 的回复:
这个通常用于系统API,关于内存操作的通常都是size_t,因为64和32位支持的地址范围不同,就像void *malloc(size_t size);一样,之所以不是int size或者uint64_t size,就是因为这是平台相关的。


那为什么不都用long unsigned int呢,long unsigned int不也是平台相关的吗,干嘛要多定义个size_t?在32位系统中,字节数为4字节;在64位系统中,Visual C++和Mingw64字节数为4字节。GCC(POSIX系统以及Cygwin)为8字节。

#5


引用 3 楼 zhao4zhong1 的回复:
32位:
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;


定义是没错,但是对移植性的影响是什么呢?赵老师方便的话能举个例子吗

#6


赵老湿说的就是例子啊,比如定义结构体里面用size_t。

#7


你自己的陈述就是例子。

如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。

#8


引用 7 楼 ForestDB 的回复:
你自己的陈述就是例子。

如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。


明白了。谢谢了啊,有点钻牛角尖了可能