8 个解决方案
#1
这个通常用于系统API,关于内存操作的通常都是size_t,因为64和32位支持的地址范围不同,就像void *malloc(size_t size);一样,之所以不是int size或者uint64_t size,就是因为这是平台相关的。
#2
学习了,
#3
32位:
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;
#4
那为什么不都用long unsigned int呢,long unsigned int不也是平台相关的吗,干嘛要多定义个size_t?在32位系统中,字节数为4字节;在64位系统中,Visual C++和Mingw64字节数为4字节。GCC(POSIX系统以及Cygwin)为8字节。
#5
定义是没错,但是对移植性的影响是什么呢?赵老师方便的话能举个例子吗
#6
赵老湿说的就是例子啊,比如定义结构体里面用size_t。
#7
你自己的陈述就是例子。
如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。
如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。
#8
明白了。谢谢了啊,有点钻牛角尖了可能
#1
这个通常用于系统API,关于内存操作的通常都是size_t,因为64和32位支持的地址范围不同,就像void *malloc(size_t size);一样,之所以不是int size或者uint64_t size,就是因为这是平台相关的。
#2
学习了,
#3
32位:
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;
typedef unsigned int size_t;
64位:
typedef unsigned __int64 size_t;
#4
那为什么不都用long unsigned int呢,long unsigned int不也是平台相关的吗,干嘛要多定义个size_t?在32位系统中,字节数为4字节;在64位系统中,Visual C++和Mingw64字节数为4字节。GCC(POSIX系统以及Cygwin)为8字节。
#5
定义是没错,但是对移植性的影响是什么呢?赵老师方便的话能举个例子吗
#6
赵老湿说的就是例子啊,比如定义结构体里面用size_t。
#7
你自己的陈述就是例子。
如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。
如果不用size_t,在机器A上你得写unsigned int;在机器B上你得写unsigned long……
有了size_t,不管哪个机器,你直接写size_t就行了,你总可以得到“最大无符号数”这个类型,而不用自己去操心。
#8
明白了。谢谢了啊,有点钻牛角尖了可能