在UNIX中,有很多的地方使用size_t代替int,请问他们有什么区别?
另外,size_t在那个头文件中声明的?应该是使用typedef吧?
看到一句话“size_t is the unsigned integer type returned by the sizeof operator",大家帮忙理解一下,为什么和sizeof有关
使用size_t是因为这个类型是与平台无关。为什么无关,就是因为他是sizeof的返回直。当你移植你的代码的时候,那不因为平台的不同而不同。大概是在stddef.h里的
2 楼size_t(阿跑) 回复于 2002-07-03 17:06:07 得分 5
size_t 在 stddef.h里定义。
在不同的实现里可能不一定相同,
In Borland implementation of the ANSI C standard, the type size_t is unsigned.
也就是typedef unsigned int size_t;
size_t is the unsigned integer type returned by the sizeof operator
的意思应该是说sizeof(size_t) == sizeof(unsigned int)
3 楼xkak2(矗立云端) 回复于 2002-07-03 17:42:00 得分 15
c中的int long等等的长度是随平台的而变化的,为了保证移植性,所以用一个中间类型size_t代表所有长度的类型,sizeof运算符返回的就是这个类型的数 据。在移植时,可以用typedef来指定该平台上size_t的真实数据类型。比如在win32和unix平台上,就是typedef unsinged int size_t。
4 楼sokoban() 回复于 2002-07-03 19:11:46 得分 0
typedef unsigned int size_t;
unsinged int,unsigned long,size_t还是std::size_t?
首先四种类型都是无符号类型,是用以表示元素个数或者数组索引的最佳类型。在作为函数参数时,不需像有符号类型那样检测值是否小于零。
1. ::size_t还是std::size_t
请使用std::size_t,因为你处于C++的世界。
在此,所有C++标准库组件用以表示元素个数的类型 (比如size()或者operator[])都是std::size_t。
std::size_t count = array.size(); // array是typedef vector<int>
std::size_t index = 0;
array[ index ] = 0;
注意:
1. 如果某个CPP没有使用任何C++标准库组件,那么就有可能需要包含<cstddef> 头文件。
2. std::size_t其实就是::size_t (::size_t被引入到namespace std中(你可以在<cstring>中找到)
基本上我们不会考虑unsigned int和unsigned long,因为处在C++的世界,使用C++标准库组件就是在所难免了。
如果你非要了解其细枝末节的话,那么下面是一份清单:
unsigned int 和 unsigned long比较(不考虑32位以下的平台)
如果不考虑可移植性:
在32位平台上更应该使用unsigned int,因为它:
1. 和unsigned long 一样的大小,32位可以表示到42.9亿。
2. 比unsigned long更常用
3. 和std::size_t是一样的类型
如果是64位平台的话:
1. unsinged int仍是32位,而unsigned long就是64位了。
2. 更应该使用unsigned long因为处理器对64位具有更快的处理速度。
就目前而言,64位平台还不够成熟,所以向64位平台的移植基本不做考虑。
但是如果你坚持要考虑可移植性(注意是硬件32位平台向64位移植,而非软件):
1. 如果对速度敏感:使用unsigned long,无论在32位还是64位都有最快的处理速度。
2. 如果对内存敏感:使用unsigned int,使用内存量不会因平台而改变。
不过通常对于硬件平台的可移植性的考虑都是多余的(不够敏捷哦)。
总结:
请在任何情况下使用std::size_[size=medium][/size]
分享到:
相关推荐
DC工具中set_dont_touch和set_size_only的区别
ssize_t send(int, const void *, size_t, int) __DARWIN_ALIAS_C(send); // void * 万能指针 // 读取数据 ssize_t recv(int, void *, size_t, int) __DARWIN_ALIAS_C(recv); // 关闭连接 int close(int);
在代码中经常看到int8_t/int16_t/int32_t/int64_t/uint8_t/size_t/ssize_t,以前对这个问题一直是稀里糊涂的,不明白它们到底是什么数据类型,现在上班了,必须把它弄明白了 uint8_t之类 那么_t的意思到底表示什么?...
size_t read (uint8_t *buffer, size_t size); size_t read (std::vector<uint8_t> &buffer, size_t size = 1); size_t read (std::string &buffer, size_t size = 1); std::string read (size_t size = 1); ...
size_t initialThreads, size_t minThreads, size_t maxThreads, size_t maxDormantThreads, size_t poolMaintPeriod, size_t dispatchTimeout, size_t maxThreadsDispatchTimeout, size_t numReads, bool ...
sizeof的作用 sizeof是c的运算符之一,用于获取操作数被分配的内存...size_t是标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。 sizeof返回的必定是无符号整形,在标准c中通过typedef将返回值
否则就会破坏 BSD套接字层的填充.POSIX开始的时候用的是size_t, Linus Torvalds(他希望有更多的人,但显然不是很多) 努力向他们解释使用size_t是完全错误的,因为在64位结构中 size_t和int的长度是不一样的,而这个参数...
intmax_t uintmax_t Integer type with the maximum width supported. int8_t uint8_t Integer type with a width of exactly 8, 16, 32, or 64 bits. For signed types, negative values are represented using 2's...
inline size_t _Fnv1a_append_bytes(size_t _Val, const unsigned char * const _First, const size_t _Count) noexcept { for (size_t _Idx = 0; _Idx < _Count; ++_Idx) { _Val ^= static_cast<size_t>(_...
asm1153原理图
Experiments_on_Page_Size_Program_Access_Patterns_and_Virtual_Memory_Performance_(2).pdf
code_size_optimization 代码密度优化方法,通过实例C来说明
Bitset(const std::string & str, size_t _Pos, size_t _Count); public: size_t size()const; //返回设置为1的位数 size_t count() const; bool subscript(size_t _Pos) const; bool get(size_t pos) const; ...
2.进入void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )函数,可看到如下关键代码: 当接收完成时调用该函数,在此函数内能够读取到接收到的数据、收到数据的长度、信号强度、信噪比。 ...
TD-LTE_FDD-LTE_TBSize_计算器,根据LTE协议DIY的TB size大小计算器,省去了查协议的时间,很方便,只需输入mcs和RN数即可得出QM与TBsize。
1.Hi3861通过DHT11获取温湿度信息; 2.Hi3861使用I2C总线驱动OLED显示; 3.Hi3861使用MQTT上传温湿度信息到OneNET云端。
H264 Video Frame Size Prediction
bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到...