size_t数据类型的意义

1 int的各种类型和size_t类型

计算机内存由一些叫做位(bit)的单元组成,int相关的类型(short, intlonglong long)通过使用不同数目的位来存储值。如果在所有的系统中,每种类型的宽度(这里的宽度描述存储整数时使用的内存量,使用的内存越多,则越宽)都相同,则使用起来会非常方便,例如,short总是16位,int总是32位等等,但是生活并非那么简单,没有一种选择能够满足计算机设计的要求。C++提供了一种灵活的标准,它确保了最小长度,比如:

  • short至少16位
  • int至少与short一样长
  • long至少32位,且至少与int一样长
  • long long至少64位,且至少与long一样长

当前很多操作系统都使用了最小长度,这位int提供了多种选择,其宽度可以是16位,24位或32位,同时又符合标准,甚至可以是64位。在老式的IBM PC的实现中,int的宽度为16位(与short相同),而在Windows XP,Windows Vista,Windows 7,Macintosh OS X,VAX和很多其他微型计算机实现中,为32位。类型的宽度随实现而异,这可能在将C++程序从一种环境移到另一种环境(包括在同一个系统中使用不同编译器)时引发问题。

比如,如果知道变量可能表示的整数值大于16位整数的最大可能值,如果使用int类型,在32位系统上是可以正常工作的,但是程序移植到16位系统上就无法正常工作,因为超越限制了。

size_t的诞生是为了让程序具有可移植性,size_t是一些C/C++标准在stddef.h中定义的,它的真实类型与操作系统有关。


//在32位操作系统中被普遍定义为:
typedef unsigned int size_t;   //4个字节
//在64位操作系统中被定义为:
typedef unsigned long size_t;  //8个字节

int在不同的操作系统上都是4个字节,与size_t不同,且int是带符号的,size_t是无符号的。

2 size_t类型的意义

size_t类型是无符号的,但size_tunsigned int又有所不同,size_t的取值范围是目标平台下最大可能的数组尺寸,一些平台下的size_t范围小于int的正数范围,又或者大于unsigned int。比如在64位下,int是4个字节,但是size_t是8个字节,这就意味着在64位下最大可能开辟的数组尺寸是2^64,如果使用int作为数组的尺寸标记,那么就会失去 2^ 32 尺寸的数组机会。但是你会说谁会在64位系统上开辟一个大于2^32大小的连续数组呢?不不不,size_t数据类型的意义并不在于此。

举个例子:在标准的C库中的许多函数使用的参数或者返回值都是表示的用字节表示的对象大小,如下:

// 按字节拷贝,从s2拷贝n个字节到s1地址
void *memcpy( void *s1 , const void *s2 , size_t  n)

第三个参数数据类型如果改成int可以吗?在大部分情况下是可以的,但并不是所有情况都可以。
int是有符号的,它可以表示负数,但是大小只能是大于等于0,所以我们用unsigned int类型来代替int类型,会让第三个参数表示的范围更大。在大部分机器上,unsigned int类型的最大值是int类型的最大值的两倍,比如,在16位机器上,unsigned int的最大值为65535,int的最大值为32767。

void *memcpy( void *s1 , const void *s2 , unsigned int n)

若第三个参数采用unsigned int类型,在16-bit 长整形指针类型32-bits的平台上就不够用了,比如说摩托罗拉第一代处理器68000,在这种情况下,处理器可能拷贝的数据大于65535个字节,但是这个函数第三个参数n不能处理这么大的数据。

若第三个参数采用unsigned long类型呢?

void *memcpy(void *s1, void const *s2, unsigned long  n);

显然,该类型可以处理更大的数据,移植性要比unsigned int类型好很多,但是性能呢?比如在16位平台上,相较于unsigned int类型来说,使用unsigned long类型会使你的代码运行效率大打折扣(因为代码量变大导致运行变慢)。

使用size_t可以有效避免这种情况。size_t类型是一个类型定义,通常将一些无符号的整形定义为size_t,比如说nsigned int或者unsigned long,甚至unsigned long long

每一个标准C实现应该选择足够大的无符号整形来代表该平台上最大可能出现的对象大小,因此使用size_t来代替intunsigned可以保证在同一个平台中,始终得到一个数据类型或变量的字节大小,保证了程序对该数据类型或变量的统计方式始终一致,不会因为平台的改变而出现错误。

3 总结

  • 使用size_t可能会提高代码的可移植性(不会因为平台的改变出现错误,因此对于无符号的整型数据,尽可能使用 size_t,而不是 int 或 unsigned

  • 使用size_t可能会提高代码的可读性(看到一个变量申请为size_t类型,你就知道它代表字节大小或数组索引,而不是错误代码或者使一个普通的值)

  • 使用size_t可能会提高代码的程序效率(在16位系统上申请unsigned long数据类型需要两条机器指令去执行,大大降低了效率)

4 参考

size_t数据类型的意义

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据与数据挖掘 作者:张婧 来源:《科教导刊·电子版》2016年第11期 摘 要 本文从大数据与数据挖掘的概念入手,阐述了大数据与数据挖掘的来源、方法及技术体 系。并从数据和使用工具方面比较了大数据与数据挖掘的异同,最后归纳总结了大数据 时代数据挖掘的发展趋势及重要意义。 关键词 大数据 数据挖掘 数据分析 中图分类号:TP391. 7 文献标识码:A 1引言 自2012年3月奥巴公布了美国《大数据研究和发展计划》以来,大数据如浪潮般席 卷着全世界,冲刷着地球的各个角落。从政府到商业科技、教育、医疗、经济、人文还 有社会的其他各个领域都无时不能看到大数据的影子。于是各个领域各个专家开始如火 如荼地讨论研究大数据的相关理论及技术。数据由数据挖掘时代过渡到大数据时代。 2数据挖掘 数据挖掘开始于上世纪70年代,经历了电子邮件时代、信息发布时代、电子商 务时代、全程电子商务时代,是指从海量的、不完整的、模糊的实际应用数据中提取隐 含在其中的人们事先不知道的但又可能有用的信息和知识的过程。通俗地讲,数据挖掘 就是利用各种分析方法和工具,对数据库中积累的大最繁杂的历史数据进行分析、归纳 与整合的工作,以发现数据内部的信息和关系的过程,提供企业管理层在进行决策时的 参考依据。 数据挖掘一般经历如图1所示:数据准备-数据挖掘- 知识发现与表示的三个过程。成熟的数据挖掘经典算法有决策树算法、聚类算法、神经 网络算法、遗传算法等。 3大数据 大数据是指数据量特别大、数据类别特别复杂的数据集,这些数据集无法用传 统的数据库进行存储,管理和处理,其具有Volume(数据量大),Velocity(数据处理 速度快)、Variety(数据具有多样性)和Value(数据价值密度低)的4V特点。大数据 是继云计算、物联网之后数据行业又一大颠覆性的技术革命。大数据时代的到来颠覆了 工业界、学术界对传统数据的认知,同时也引起了数据获取、存储、分析、挖掘以及可 视化等技术的变革。 根据大数据处理的生命周期,大数据的技术体系有大数据的采集与预处理、大 数据存储与管理、大数据计算模式与系统、大数据分析与挖掘、大数据分析与挖掘、大 数据可视化分析及大数据隐私与安全等几个方面,如图2所示。 4大数据与数据挖掘的关系 大数据与数据挖掘既有不同之处,又可互相关联。 4.1 数据挖掘与大数据的相同点 都有以海量数据为基础,通过某种或几种工具或算法,挖掘出供人们利用的知 识发现和规律,供人们使用,为人们服务。在挖掘知识表示及规律方面,它们用的方法 是大同小异的。 4.2大数据与数据挖掘的不同点 在数据方面:数据挖掘一般基于某个或几个数据库中的数据,数据规模相对较 小,基本以为MB处理单位;数据类型种类单一,往往是一种或少数几种,而且以结构化 数据为主;因为数据挖掘往往使用的是常规数据库,因此先有模式再有数据;数据仅作 为处理对象。而大数据数据规模很大,以GB,甚至TB、PB为基本处理单位;数据种类繁 多,而这些数据中又包含着结构化、半结构化以及非结构化的数据,而且占据着越来越 多的份额;大数据时代很多情况下很难预先确定模式,模式只有在数据出现之后才能确 定,且模式随着数据量的增长处于不断的演变之中;大数据时代的数据将作为一种资源 来辅助解决其他诸多领域的问题;而且大数据由于其数据量太大因此还要考虑存储数据 的问题。 在处理工具方面:数据挖掘一般应用一种工具或少数几种工具就可以处理得到 发现的知识并加以应用,也就是所谓的One size fits all;大数据时代不可能存在一种工具就能解决问题,得出有用的结论,即No size fits all。 5总结 总之,大数据时代的数据利用云存储已渐成一个趋势,数据挖掘是其关键的一 环,大数据的分析处理可以把海量数据分成几块利用数据挖掘技术进行挖掘,也可以将 数据挖掘技术加以整合,研发出更高效、更准确的平台或算法对大数据直接进行挖掘, 得出蕴含在海量数据中的规律或商机,如此才能让大数据真正切实地为人们服务。因此 数据挖掘在大数据时代的数据分析和挖掘过程中具有重要的意义。 参考文献 [1] HU H,WEN Y G,CHUA T S,LI X L.Toward scalable system for big data analyties:a technology tutorial[J].IEEE Access,2014(2):652-687. [2] 冯登国,张敏.李昊大数据安全与隐私保护[J].计算机学报,2014. [3] 孟小峰.慈祥大数据管理:概念技术与挑战[J].计算机研究与发展,2013. ----------------------- 大数据与数据挖掘全文共4页,当前为第1页。 大数据与数据挖掘全文共4页,当前为第2页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值