c言语详解sizeof (c语言sring)
本文目录导航:
c言语详解sizeof
C言语中的sizeof操作符是一个单目运算符,用于失掉其操作数在内存中的存储大小,以字节为单位。
它并非函数,而是依据操作数的类型选择其结果。
以下是sizeof操作符的详细经常使用和结果说明:

1. 基本用法: 用于数据类型时,如`sizeof(int)`;用于变量时,如`sizeof(var_name)`。
留意,用于函数类型、不齐全类型(如未知大小的数组或结构)或位字段时,sizeof是有效的。
2. 结果类型: sizeof操作符的结果是`size_t`类型,这是无符号整型,用来存储最大对象字节数。
在Linux v2.6 gcc v4中,不同类型的字节数如下: - char: 1字节 - int, unsigned int: 4字节 - short int, unsigned short: 2字节 - long int, unsigned long: 4字节 - float: 4字节 - double: 8字节 - long double: 12字节 - 指针: 普通为4字节,取决于编译器和指针类型(如Microsoft C/C++中的near指针为2字节)。
3. 数组和联结类型: 数组的sizeof是元素总数,联结类型的sizeof是最大成员的字节数,结构类型的sizeof则是一切成员的总字节数(或者蕴含对齐填充)。
4. 函数参数: 当sizeof操作数是函数形参时,它会前往指针的大小,如Linux中理论为4字节。
5. 典型用途: sizeof罕用于内存调配(如malloc)和I/O操作(如fread),以及计算数组元素个数(如memset)。
c言语中bit与sbit的区别
在C言语中,bit和sbit的关键区别在于它们的定义和经常使用场景。
繁难来说,bit是规范的数据单位,用于表示二进制位;而sbit则罕用于表示不凡的位场标志或属性标志。
其中,“bit”指的是一个二进制位,它只能表示一个二进制的值,即“0”或“1”。
而“sbit”理论在嵌入式编程中出现,用于表示一个不凡的位字段,理论用于配件寄存器的不凡位操作。
详细解释如下:在C言语中,bit是基础的二进制数据单元。
它是计算机外部消息处置的基础,用于存储和处置消息的基本单位。
无论是整数、浮点数还是字符,它们都是由一系列的bit组成的。
每个bit都有特定的值,可以是0或1。
而sbit是一个不凡的位字段,关键用于嵌入式编程和配件关系的操作。
在嵌入式系统中,配件寄存器的每一位理论具备特定的含意和用途。
这时,经常使用sbit可以繁难地表示和操作这些不凡的位。
特意是在与特定的配件寄存器交互时,sbit能够提供愈加直观和准确的操作模式。
它常罕用于设置或肃清某个特定的位标志,这些标志或者与配件的某些形态或配置间接关系。
因此,在一些触及到嵌入式编程或配件操作的场所中,sbit的经常使用更为经常出现。
须要留意的是,并非一切的编译器都允许sbit关键字,这关键取决于详细的编译器和编程环境。
总的来说,把握bit和sbit的差异,可以协助咱们在编程时愈加准确地经常使用它们。
ISO/OSI参考模型与TCP/IP模型的异同点
全文: OSI参考模型谈到网络不能不谈OSI参考模型,只管OSI参考模型的实践应意图义不是很大,但其确实关于了解网络协定外部的运作很有协助,也为咱们学习网络协定提供了一个很好的参考。
在事实网络环球里,TCP/IP协定栈取得了更为宽泛的运行。
1.1 OSI参考模型的分层结构OSI参考模型(OSI/RM)的全称是开明系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国内规范化组织(International Standard Organization,ISO)提出的一个网络系统互连模型。
图1-1OSI参考模型在这个OSI七层模型中,每一层都为其上一层提供服务、并为其上一层提供一个访问接口或界面。
不同主机之间的相反档次称为平等层。
如主机A中的表示层和主机B中的表示层互为平等层、主机A中的会话层和主机B中的会话层互为平等层等。
平等层之间相互通讯须要遵守必定的规则,如通讯的内容、通讯的模式,咱们将其称为协定(Protocol)。
咱们将某个主机上运转的某种协定的汇合称为协定栈。
主机正是应用这个协定栈来接纳和发送数据的。
OSI参考模型经过将协定栈划分为不同的档次,可以简化疑问的剖析、处置环节以及网络系统设计的复杂性。
OSI参考模型的提出是为了处置不同厂商、不同结构的网络产品之间互连时遇到的不兼容性疑问。
然而该模型的复杂性阻碍了其在计算机网络畛域的实践运行。
与此对照,前面咱们将要学习的TCP/IP参考模型,取得了十分宽泛的运行。
实践上,也是目前因特网范围内运转的惟逐一种协定。
1.2 OSI参考模型中各层的作用在OSI参考模型中,从下至上,每一层成功不同的、指标明白的配置。
1、物理层(Physical Layer)物理层规则了激活、维持、封锁通讯端点之间的机械个性、电气个性、配置个性以及环节个性。
该层为高层协定提供了一个传输数据的物理媒体。
在这一层,数据的单位称为比特(bit)。
属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
2、数据链路层(Data Link Layer)数据链路层在无法靠的物理介质上提供牢靠的传输。
该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
数据链路层协定的代表包括:SDLC、HDLC、PPP、STP、帧中继等。
3、网络层(Network Layer)网络层担任对子网间的数据包启动路由选用。
此外,网络层还可以成功拥塞控制、网际互连等配置。
在这一层,数据的单位称为数据包(packet)。
网络层协定的代表包括:IP、IPX、RIP、OSPF等。
4、传输层(Transport Layer)传输层是第一个端到端,即主机到主机的档次。
传输层担任将高层数据分段并提供端到端的、牢靠的或无法靠的传输。
此外,传输层还要处置端到端的过错控制和流量控制疑问。
在这一层,数据的单位称为数据段(segment)。
传输层协定的代表包括:TCP、UDP、SPX等。
5、会话层(Session Layer)会话层治理主机之间的会话进程,即担任建设、治理、中断进程之间的会话。
会话层还应用在数据中拔出校验点来成功数据的同步。
会话层协定的代表包括:NetBIOS、ZIP(AppleTalk区域消息协定)等。
6、表示层(Presentation Layer)表示层对高层数据或消息启动变换以保障一个主机运行层消息可以被另一个主机的运行程序了解。
表示层的数据转换包括数据的加密、紧缩、格局转换等。
表示层协定的代表包括:ASCII、ASN.1、JPEG、MPEG等。
7、运行层(Application Layer)运行层为操作系统或网络运行程序提供访问网络服务的接口。
运行层协定的代表包括:Telnet、FTP、HTTP、SNMP等。
1.3 OSI参考模型中的数据封装环节图1-2OSI参考模型中的数据封装环节如图1-2所示,在OSI参考模型中,当一台主机须要传送用户的数据(DATA)时,数据首先经过运行层的接口进入运行层。
在运行层,用户的数据被加上运行层的报头(Application Header,AH),构成运行层协定数据单元(Protocol Data Unit,PDU),而后被递交到下一层-表示层。
表示层并不关心高层-运行层的数据格局而是把整个运行层递交的数据包看成是一个全体启动封装,即加上表示层的报头(Presentation Header,PH)。
而后,递交到高层-会话层。
雷同,会话层、传输层、网络层、数据链路层也都要区分给高层递交上去的数据加上自己的报头。
它们是:会话层报头(Session Header,SH)、传输层报头(Transport Header,TH)、网络层报头(Network Header,NH)和数据链路层报头(Data link Header,DH)。
其中,数据链路层还要给网络层递交的数据加上数据链路层报尾(Data link Termination,DT)构成最终的一帧数据。
当一帧数据经过物理层传送到指标主机的物理层时,该主机的物理层把它递交到高层-数据链路层。
数据链路层担任去掉数据帧的帧头部DH和尾部DT(同时还启动数据校验)。
假设数据没有出错,则递交到高层-网络层。
雷同,网络层、传输层、会话层、表示层、运行层也要做相似的上班。
最终,原始数据被递交到指标主机的详细运行程序中。
2 TCP/IP参考模型ISO制订的OSI参考模型的过于宏大、复杂招致了许多批判。
与此对照,由技术人员自己开发的TCP/IP协定栈取得了更为宽泛的运行。
如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比表示图。
图2-1TCP/IP参考模型2.1 TCP/IP参考模型的档次结构TCP/IP协定栈是美国国防部初级钻研方案局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网经常使用的参考模型。
ARPANET是由美国国防部(U.S.Department of Defense,DoD)资助的钻研网络。
最后,它只衔接了美国境内的四所大学。
随后的几年中,它经过租用的电话线衔接了数百所大学和政府部门。
最终ARPANET开展成为环球规模最大的互连网络-因特网。
最后的ARPANET于1990年初身性地封锁。
TCP/IP参考模型分为四个档次:运行层、传输层、网络互连层和主机到网络层。
如图2-2所示。
图2-2TCP/IP参考模型的档次结构在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的配置被兼并到运行层成功)。
同时将OSI参考模型中的数据链路层和物理层兼并为主机到网络层。
上方,区分引见各层的关键配置。
1、主机到网络层实践上TCP/IP参考模型没有真正形容这一层的成功,只是要求能够提供应其高层-网络互连层一个访问接口,以便在其上行递IP分组。
因为这一档次未被定义,所以其详细的成功方法将随着网络类型的不同而不同。
2、网络互连层网络互连层是整个TCP/IP协定栈的外围。
它的配置是把分组发往指标网络或主机。
同时,为了尽快地发送分组,或者须要沿不同的门路同时启动分组传递。
因此,分组抵达的顺序和发送的顺序或者不同,这就须要高层必定对分组启动排序。
网络互连层定义了分组格局和协定,即IP协定(Internet Protocol)。
网络互连层除了须要成功路由的配置外,也可以成功将不同类型的网络(异构网)互连的义务。
除此之外,网络互连层还须要成功拥塞控制的配置。
3、传输层在TCP/IP模型中,传输层的配置是使源端主机和指标端主机上的平等实体可以启动会话。
在传输层定义了两种服务品质不同的协定。
即:传输控制协定TCP(transmission control protocol)和用户数据报协定UDP(user datagram protocol)。
TCP协定是一个面向衔接的、牢靠的协定。
它将一台主机收回的字节流无过错地发往互联网上的其余主机。
在发送端,它担任把高层传送上去的字节流分红报文段并传递给高层。
在接纳端,它担任把收到的报文启动重组后递交给高层。
TCP协定还要处置端到端的流量控制,以防止缓慢接纳的接纳方没有足够的缓冲区接纳发送方发送的少量数据。
UDP协定是一个无法靠的、无衔接协定,关键实用于不须要对报文启动排序和流量控制的场所。
4、运行层TCP/IP模型将OSI参考模型中的会话层和表示层的配置兼并到运行层成功。
运行层面向不同的网络运行引入了不同的运行层协定。
其中,有基于TCP协定的,如文件传输协定(File Transfer Protocol,FTP)、虚构终端协定(TELNET)、超文本链接协定(Hyper Text Transfer Protocol,HTTP),也有基于UDP协定的。
TCP/IP报文格局1、IP报文格局IP协定是TCP/IP协定族中最为外围的协定。
它提供无法靠、无衔接的服务,也即依赖其余层的协定启动过错控制。
在局域网环境,IP协定往往被封装在以太网帧(见本章1.3节)中传送。
而一切的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送。
如图2-3所示: 图2-3TCP/IP报文封装图2-4是IP头部(报头)格局:(RFC 791)。
图2-4IP头部格局其中:●版本(Version)字段:占4比特。
用来标明IP协定成功的版本号,以后普通为IPv4,即0100。
●报头长度(Internet Header Length,IHL)字段:占4比特。
是头部占32比特的数字,包括可选项。
普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。
此字段最大值为60字节。
●服务类型(Type of Service ,TOS)字段:占8比特。
其中前3比特为优先权子字段(Precedence,现已被疏忽)。
第8比特保管未用。
第4至第7比特区分代表提前、吞吐量、牢靠性和破费。
当它们取值为1时区分代表要求最小时延、最大吞吐量、最高牢靠性和最小费用。
这4比特的服务类型中只能置其中1比特为1。
可以全为0,若全为0则表示普通服务。
服务类型字段申明了数据报被网络系统传输时可以被怎么处置。
例如:TELNET协定或者要求有最小的提前,FTP协定(数据)或者要求有最大吞吐量,SNMP协定或者要求有最高牢靠性,NNTP(Network News Transfer Protocol,网络资讯传输协定)或者要求最小费用,而ICMP协定或者无不凡要求(4比特全为0)。
实践上,大局部主时机疏忽这个字段,但一些灵活路由协定如OSPF(Open Shortest Path First Protocol)、IS-IS(Intermediate System to Intermediate System Protocol)可以依据这些字段的值启动路由决策。
●总长度字段:占16比特。
指明整个数据报的长度(以字节为单位)。
最大长度为字节。
●标志字段:占16比特。
用来惟一地标识主机发送的每一份数据报。
理论每发一份报文,它的值会加1。
●标志位字段:占3比特。
标志一份数据报能否要求分段。
●段偏移字段:占13比特。
假设一份数据报要求分段的话,此字段指明该段偏移距原始数据报开局的位置。
●生定期(TTL:Time to Live)字段:占8比特。
用来设置数据报最多可以经过的路由器数。
由发送数据的源主机设置,理论为32、64、128等。
每经过一个路由器,其值减1,直到0时该数据报被摈弃。
●协定字段:占8比特。
指明IP层所封装的高层协定类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等。
●头部校验和字段:占16比特。
内容是依据IP头部计算失掉的校验和码。
计算方法是:对头部中每个16比特启动二进制反码求和。
(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据启动校验)。
●源IP地址、指标IP地址字段:各占32比特。
用来标明发送IP数据报文的源主机地址和接纳IP报文的指标主机地址。
可选项字段:占32比特。
用来定义一些任选项:如记载门路、期间戳等。
这些选项很少被经常使用,同时并不是一切主机和路由器都允许这些选项。
可选项字段的长度必定是32比特的整数倍,假设无余,必定填充0以到达此长度要求。
2、TCP数据段格局TCP是一种牢靠的、面向衔接的字节流服务。
源主机在传送数据前须要先和指标主机建设衔接。
而后,在此衔接上,被编号的数据段按序收发。
同时,要求对每个数据段启动确认,保障了牢靠性。
假设在指定的期间内没有收到指标主机对所发数据段确实认,源主机将再次发送该数据段。
如图2-5所示,是TCP头部结构(RFC 793、1323)。
图2-5TCP头部结构●源、指标端口号字段:占16比特。
TCP协定经过经常使用端口来标识源端和指标端的运后退程。
端口号可以经常使用0到之间的任何数字。
在收到服务恳求时,操作系统灵活地为客户端的运行程序调配端口号。
在主机端,每种服务在妇孺皆知的端口(Well-Know Port)为用户提供服务。
●顺序号字段:占32比特。
用来标识从TCP源端向TCP指标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
●确认号字段:占32比特。
只要ACK标志为1时,确认号字段才有效。
它蕴含指标端所希冀收到源端的下一个数据字节。
●头部长度字段:占4比特。
给出头部占32比特的数目。
没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。
●标志位字段(U、A、P、R、S、F):占6比特。
各比特的含意如下:◆URG:紧急指针(urgent pointer)有效。
◆ACK:确认序号有效。
◆PSH:接纳方应该尽快将这个报文段交给运行层。
◆RST:重建衔接。
◆SYN:动员一个衔接。
◆FIN:监禁一个衔接。
●窗口大小字段:占16比特。
此字段用来启动流量控制。
单位为字节数,这个值是本机希冀一次性接纳的字节数。
●TCP校验和字段:占16比特。
对整个TCP报文段,即TCP头部和TCP数据启动校验和计算,并由指标端启动验证。
●紧急指针字段:占16比特。
它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
●选项字段:占32比特。
或者包括窗口扩展因子、期间戳等选项。
3、UDP数据段格局UDP是一种无法靠的、无衔接的数据报服务。
源主机在传送数据前不须要和指标主机建设衔接。
数据被冠以源、指标端口号等UDP报头字段后间接发往目的主机。
这时,每个数据段的牢靠性依托高层协定来保障。
在传送数据较少、较小的状况下,UDP比TCP愈加高效。
如图2-6所示,是UDP头部结构(RFC 793、1323): 图2-6UDP数据段格局●源、指标端口号字段:占16比特。
作用与TCP数据段中的端口号字段相反,用来标识源端和指标端的运后退程。
●长度字段:占16比特。
标明UDP头部和UDP数据的总长度字节。
●校验和字段:占16比特。
用来对UDP头部和UDP数据启动校验。
和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必定有的。
2.3 套接字在每个TCP、UDP数据段中都蕴含源端口和指标端口字段。
有时,咱们把一个IP地址和一个端口号合称为一个套接字(Socket),而一个套接字对(Socket pair)可以惟一地确定互连网络中每个TCP衔接的双方(客户IP地址、客户端口号、主机IP地址、主机端口号)。
如图2-7所示,是经常出现的一些协定和它们对应的服务端口号。
图2-7经常出现协定和对应的端口号须要留意的是,不同的运行层协定或者基于不同的传输层协定,如FTP、TELNET、SMTP协定基于牢靠的TCP协定。
TFTP、SNMP、RIP基于无法靠的UDP协定。
同时,有些运行层协定占用了两个不同的端口号,如FTP的20、21端口,SNMP的161、162端口。
这些运行层协定在不同的端口提供不同的配置。
如FTP的21端口用来侦听用户的衔接恳求,而20端口用来传送用户的文件数据。
再如,SNMP的161端口用于SNMP治理进程失掉SNMP代理的数据,而162端口用于SNMP代理主意向SNMP治理进程发送数据。
还有一些协定经常使用了传输层的不同协定提供的服务。
如DNS协定同时经常使用了TCP 53端口和UDP 53端口。
DNS协定在UDP的53端口提供域名解析服务,在TCP的53端口提供DNS区域文件传输服务。
2.4 TCP衔接建设、监禁时的握手环节1、TCP建设衔接的三次握手环节TCP会话经过三次握手来初始化。
三次握手的指标是使数据段的发送和接纳同步。
同时也向其余主机标明其一次性可接纳的数据量(窗口大小),并建设逻辑衔接。
这三次握手的环节可以简述如下:●源主机发送一个同步标志位(SYN)置1的TCP数据段。
此段中同时标明初始序号(Initial Sequence Number,ISN)。
ISN是一个随期间变动的随机值。
●指标主机发回确认数据段,此段中的同步标志位(SYN)雷同被置1,且确认标志位(ACK)也置1,同时在确认序号字段标明指标主机等候收到源主机下一个数据段的序号(即标明前一个数据段已收到并且没有失误)。
此外,此段中还蕴含指标主机的段初始序号。
●源主机再回送一个数据段,雷同带有递增的发送序号和确认序号。
至此为止,TCP会话的三次握手成功。
接上去,源主机和指标主机可以相互收发数据。
整个环节可用图2-8表示。
图2-8TCP建设衔接的三次握手环节2、TCP监禁衔接的四次握手环节TCP衔接的监禁须要启动四次握手,步骤是:●源主机发送一个监禁衔接标志位(FIN)为1的数据段收回完结会话恳求总结:OSI 参考模型与TCP/ IP 参考模型都是用来处置不同计算机之间数据传输的疑问。
这两种模型都是基于独立的协定栈的概念,都驳回分层的方法,每层都建设在它的下一层之上,并为它的上一层提供服务。
例如:在两种参考模型中,传输层及其以下的各层都为须要通讯的进程提供端到端、与网络有关的传输服务,这些层成了传输服务的提供者;雷同,在传输层以上的各层都是传输服务的用户。
21 两种参考模型不同点(1) OSI 参考模型的协定比TCP/ IP 参考模型的协定更具备面向对象的个性。
OSI 参考模型明白了三个关键概念:服务、接口和协定。
这些思维和现代的面向对象的编程技术十分吻合。
一个对象有一组方法,该对象外部的进程可以经常使用它们,这些方法的语义定义该对象提供的服务,方法的参数和结果就是对象的接口,对象外部的代码成功它的协定。
当然,这些代码在该对象外部是无法见的。
而TCP/ IP 参考模型最后没有明白区分服务、接口和协定,人们也试图改良它,使其愈加凑近OSI 参考模型。
从上述的比拟剖析可以看出,OSI 参考模型中的协定比TCP/ IP 参考模型中的协定具备更好的面向对象的个性,在技术出现变动时,因为它的封装性和暗藏性,能够比拟容易地启动交流和降级。
而TCP/ IP 参考模型因为没有明白区分服务、接口和协定的概念,关于经常使用新技术设计新网络来说,这种参考模型就会遇到许多不利的起因。
另外,TCP/ IP 参考模型齐全不是通用的,不适宜形容该模型以外的其余协定栈。
(2) TCP/ IP 参考模型中对异构网(Heterogeneous Network) 互连的处置比OSI 参考模型更正当。
TCP/ IP 首先思考的是多种异构网的互连疑问,并将网际协定IP 作为TCP/ IP 的关键组成局部。
但ISO 和CCITT(国内电报电话咨询委员会) 最后只思考到经常使用一种规范的专用数据网将各种不同的系统互连在一同。
起初, ISO 意识到了网际协定IP 的关键性,但为时已晚,只好在网络层中划分出一个子层来成功相似TCP/ IP 中IP 的作用。
(3) TCP/ IP 参考模型比OSI 参考模型更器重面向无衔接的服务。
TCP/ IP 一开局就对面向衔接服务和无衔接服务偏重,而OSI 在开局时只强调面向衔接服务。
经过相当长的一段期间,OSI 才开局制订无衔接服务的有关规范。
例如:OSI 参考模型在传输层仅允许面向衔接的通讯模式,而TCP/ IP 参考模型在该层允许面向衔接和无衔接两种通讯模式,提供应用户选用的余地,这对繁难的恳求—应对协定是十分关键的