剪力墙钢筋标注标注符号qs,h,v;is

【图文】常用的电气图形符号_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
常用的电气图形符号
上传于||暂无简介
大小:983.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢您好,欢迎您来到工业电气分销网!
您现在的位置: >
资讯栏目导航
电气图形符号大全
&比较详细的介绍电气符号,图标符号以及作用说明,符号在电气管理和应用中起到非常重要的作用。
图形符号的种类和组成
图表符号一般分为:限定符号、一般符号、方框符号、以及标记或字符。
限定符号不能单独使用,必须同其他符号组合使用,构成完整的图形符号。
如交流电动机的图表符号,由文字符号、交流的限定符号以及轮廓要素组成。
延时过流继电器图形符号,由测量继电器方框符号要素,特性量值大于整定值时动作和延时动作的限定符号以及电流符号组成。
方框符号一般用在使用单线表示法的图中,如系统图和框图中,由方框符号内带有限定符号以表示对象的功能和系统的组成,如整流器图表符号,由方框符号内带有交流和直流的限定符号以及可变性限定符号组成。
图形符号分类:
限定符号和常用的其他符号包括:电流和电压的种类,可变性,力或运动的方向,流动方向,特性量的动作相关性,效应或相关,性辐,射信号波形,机械控制,操作方法,非电量控制,接地和接机壳等。
导线和连接器件图形符号包括:导线,端子和导线的连接,连接器件,电缆附件等。
无源元件图形符号包括:电阻器,电感器,电容器等。
半导体和电子管图形符号包括:二极管,晶闸管,光电子,光敏器件等。
电能的发生和转换图形符号包括:绕组连接的限定符号,内部连接的绕组,电机部件及类型变压器,电抗器,消弧线圈,制动电阻,串并补电容,变流器,原电池等。
开关,控制和保护装置图形符号包括:触点开关,开关装置和起动器,有或无继电器,测量继电器,熔断器,间隙避雷器等。
测量仪表灯和信号器件图形符号包括:指示积算和记录仪表,遥测器件,电钟,灯,喇叭和电铃等。
电信图形符号包括:交换设备,电话机,传输信号发生器,变换器,放大器,光纤,光缆,光器件等。
电力照明和电信布置图形符号包括:发电厂和变电所,电信局局和机房设施,线路,配线,电什,配电箱,控制台,控制设备,用电设备,插座,开关和照明灯照明引出线等。
二进制逻辑单元图形符号包括:与输入输出和其他连接有关的限定符号,内部连接组合
单元和时序单元等。
模拟单元图的符号包括:模拟和数字信号识别用的限定符号,放大器,函数器,信号转换器,电子开关等。
电气设备常用文字符号
  1、基本文字符号
空气调节器
带瞬时动作的限流保护器件
限压保护器件
同步发电机
异步发电机
带延时动作的限流保护器件
过流继电器
带瞬时、延时动作的限流保护器件
延时继电器
同步电动机
力矩电动机
电流互感器
电动机保护开关
电源互感器
电压互感器
&  2、辅助文字符号
电流、模拟
延时、数字
主、中间线
压力、保护
保护接地与中性共用
不接地保护
置位、定位
温度、时间
无干扰接地
速度、电压、真空
&图形符号大全:
图 形 符 号
开关(机械式)电气图形符号
多级开关一般符号单线表示
多级开关一般符号多线表示
接触器(在非动作位置触点断开)
接触器(在非动作位置触点闭合)
负荷开关(负荷隔离开关)电气图用图形符号
具有自动释放功能的负荷开关
熔断器式断路器
熔断器一般符号
跌落式熔断器
熔断器式开关
熔断器式隔离开关
熔断器式负荷开关
当操作器件被吸合时延时闭合的动合触点
当操作器件被释放时延时闭合的动合触点
当操作器件被释放时延时闭合的动断触点电气图用图形符号
当操作器件被吸合时延时闭合的动断触点
当操作器件被吸合时延时闭合和释放时延时断开的动合触点
按钮开关(不闭锁)
旋钮开关、旋转开关(闭锁)
位置开关,动合触点
限制开关,动合触点
位置开关,动断触点
限制开关,动断触点
热敏开关,动合触点
注:θ可用动作温度代替
热敏自动开关,动断触点
注:注意区别此触点和下图所示热继电器的触点
具有热元件的气体放电管荧光灯起动器
动合(常开)触点
注:本符号也可用作开关一般符号
动断(常闭)触点
先断后合的转换触点
当操作器件被吸合或释放时,暂时闭合的过渡动合触点
座(内孔的)或插座的一个极
插头(凸头的)或插头的一个极
插头和插座(凸头的和内孔的)
接通的连接片
双绕组变压器
三绕组变压器
自耦变压器
电抗器扼流图
&&&&& 电流互感器
脉冲变压器
具有两个铁芯和两个二次绕组的电流互感器
在一个铁芯上具有两个二次绕组的电流互感器
具有有载分接开关的三相三绕组变压器,有中性点引出线的星形-三角形连接
三相三绕组变压器,两个绕组为有中性点引出线的星形,中性点接地,第三绕组为开口三角形连接
三相变压器
星形-三角形连接
具有有载分接开关的三相变压器 星形-三角形连接
三相变压器
星形-曲折形连接
操作器件一般符号
具有两个绕组的操作器件组合表示法
热继电器的驱动器件
气体继电器
自动重闭合器件
电阻器一般符号
可变电阻器
可调电阻器
滑动触点电位器
预调电位器
电容器一般符号
可变电容器
可调电容器
双联同调可变电容器
指示仪表(星号必须按规定予以代表)
无功电流表电气图形符号
最大需量指示器(由一台积算仪表操作的)
无功功率表
功率因素表
温度计、高温计(θ可由t代替)
积算仪表、电能表(星号必须按规定予以代替)
安培小时计
电能表(瓦特小时表)
无功电能表
带发送器电能表
由电能表操纵的遥测仪表(转发器)
由电能表操纵的带有打印器材的遥测仪表(转发器)
屏、盘、架一般符号 注:可用文字符号或型号表示设备名称
列架一般符号
人工交换台、中断台、测量台、业务台等一般符号
控制及信号线路(电力及照明用)
原电池或蓄电池
原电池组或蓄电池组
带抽头的原电池组或蓄电池组
接地一般符号
接机壳或接底板
无噪声接地
电缆终端头
电力电缆直通接线盒
电力电缆连接盒,电力电缆分线盒
控制和指示设备
报警启动装置(点式-手动或自动)
线型探测器
火灾报警装置
GB/T00新版符号
电流和电压的种类
电压可标注在符号右边,系统类型可标注在左边
频率值或频率范围可标注在符号的右边
示例:50Hz
~100…60kHz
示例:交流,频率范围100kHz到600Hz
3/N~400/230V
电压值也可标注在符号右边,相数和中性线数可标注在符号左边
示例:交流,三相带中性线,400/230V 50Hz
示例:交流,三相,50 Hz,具有一个直接接地点
3/N~50Hz/TN-S
且中性线与保护导体全部分开的系统(表示三相带中性线过去曾允许用3N,3+N,现在规定只能用3/N)
中性(中性线)
导线和连接器件、插头插座、电缆终端头
端子和导线的连接
在T型连接符号中增加连接点符号
导体的双重连接
形式2仅在设计认为必要时使用(如果是多重连接,在画图容易产生混淆时,连接的画黑点,不连接的不画黑点)
接通的连接片
电阻器& 一般符号
(矩形的长宽比约为3:1)
可调电阻器
(由电阻器一般符号和可调节性通用符号组成)
电容器,一般符号
半导体管和电子管
半导体二极管
半导体二极管一般符号
无指定形式的三极晶体闸流管
若没有必要指定控制撮的类型时,本符号用于表示反向阻断三极晶体闸流管
半导体三极管
PNP半导体管
集电极接管壳的NPN半导体管
NPN型半导体三极管
半导体管和电子管
光敏、光电子半导体
光电二极管
具有非对称导电性的光电器件
电机、变压器及变流器
直流串励电动机
异步电动机
三相鼠笼式异步电动机
单相鼠笼式有分相绕组引出端的异步电动机
三相绕线式异步电动机
电机、变压器及变流器
变压器和电抗器
双绕组变压器
瞬时电压的极性可以在形式2中表示示例:
示出瞬时电压极性的双绕组变压器
注入绕组标记端的瞬时电流产生助磁通
三绕组变压器
常用的其他符号
接地、接机壳和等电位
接地,一般符号
地,一般符号
如果接地的状况或接地目的表达得不够明显,可加补充信息
抗干扰接地,无噪声接地
此符号可代替接地一般符号以表示接地连接具有专门的保护功能,例如在故障情况下防止电击的接地
开关、控制和保护装置
两个或三个位置的触点
动合触点,也称常开触点
在许多情况下,也可作为,一般开关符号使用
注意,动触点必须偏向左边,且动触点与静触点是断开的
动断触点,也称常闭触点
注意动、静触点必须偏向右边,且动、静触点在图形符号上是连接的
先断合后的转换触点
注意将该符号与先合后断的转换触点区别开来。
常用于表示控制开关或继电器的触点
开关、控制和保护装置
当操作器件被吸合时延时闭合的动合触点
注意起延时作用的圆弧符号的方向,它表明触点朝圆弧中心方向的运动是延时。该符号在IEC617—7中只有此唯一一种形式
当操作器件被释放时延时断开的动合触点
当操作器件被吸合时,延时断开的动断触点
当操作器件被释放时,延时断开的动断触点
测量仪表、灯和信号器
灯和信号器件
灯,一般符号
信号灯,一般符号
如果要求指示颜色,则在靠近符号处标出下列代码:
RD—红;YE—黄;GN—绿;DU—蓝;WH—白
如果要求指出灯的类型,则在靠近符号处标出下列代码:
Ne—氖;Xe—氙;Na—钠气;Hg—汞;I—碘;IN—白炽;EL—电发光;ARC—弧光;FL—荧光;IR—红外线;UV—紫外线;LED—发光二极管
闪光灯信号
电力照明和电信布置
插座和开关
(电源)插座一般符号
(电源)多个插座(示出三个)
带保护接点(电源)插座
具有护板的(电源)插座
开关,一般符号
暗装、密闭、防爆符号已取消
该符号系GB4728—85标准,且是IEC617—1983标准的派生符号,必要时可部分采用
单极拉线开关
单极限时开关
&开关符号:
&行程开关行图形符号:
&按钮图形符号:
&&时间继电器触点符号:
&本文地址:
您可能会感兴趣
圆形线耳&苏州顺胜
圆形线耳&苏州顺胜
圆形线耳&苏州顺胜
高级图形终端&海泰克电气图形符号大全,电气图标符号以及作用说明 - 电工基础 - 电工之家
电工之家-电工学习网站
当前位置: >
电气图形符号大全,电气图标符号以及作用说明
时间: 11:46
来源:电工之家
作者:编辑部
【摘要】电气图形符号大全 比较详细的介绍电气符号,图标符号以及作用说明,电气符号在电气管理和应用中起到非常重要的作用。 图形符号的种类和组成 图表符号一般分为:限定符号、一般符号、方框符号、以及标记或字符。 限定符号不能单独使用,必须同其他符号组合使用......
&电气图形符号大全比较详细的介绍电气符号,图标符号以及作用说明,电气符号在电气管理和应用中起到非常重要的作用。
图形符号的种类和组成
图表符号一般分为:限定符号、一般符号、方框符号、以及标记或字符。
限定符号不能单独使用,必须同其他符号组合使用,构成完整的图形符号。
如交流电动机的图表符号,由文字符号、交流的限定符号以及轮廓要素组成。
延时过流继电器图形符号,由测量继电器方框符号要素,特性量值大于整定值时动作和延时动作的限定符号以及电流符号组成。
方框符号一般用在使用单线表示法的图中,如系统图和框图中,由方框符号内带有限定符号以表示对象的功能和系统的组成,如整流器图表符号,由方框符号内带有交流和直流的限定符号以及可变性限定符号组成。
图形符号分类:
限定符号和常用的其他符号包括:电流和电压的种类,可变性,力或运动的方向,流动方向,特性量的动作相关性,效应或相关,性辐,射信号波形,机械控制,操作方法,非电量控制,接地和接机壳等。
导线和连接器件图形符号包括:导线,端子和导线的连接,连接器件,电缆附件等。
无源元件图形符号包括:电阻器,电感器,电容器等。
半导体和电子管图形符号包括:二极管,晶闸管,光电子,光敏器件等。
电能的发生和转换图形符号包括:绕组连接的限定符号,内部连接的绕组,电机部件及类型变压器,电抗器,消弧线圈,制动电阻,串并补电容,变流器,原电池等。
开关,控制和保护装置图形符号包括:触点开关,开关装置和起动器,有或无继电器,测量继电器,熔断器,间隙避雷器等。
测量仪表灯和信号器件图形符号包括:指示积算和记录仪表,遥测器件,电钟,灯,喇叭和电铃等。
电信图形符号包括:交换设备,电话机,传输信号发生器,变换器,放大器,光纤,光缆,光器件等。
电力照明和电信布置图形符号包括:发电厂和变电所,电信局局和机房设施,线路,配线,电什,配电箱,控制台,控制设备,用电设备,插座,开关和照明灯照明引出线等。
二进制逻辑单元图形符号包括:与输入输出和其他连接有关的限定符号,内部连接组合
单元和时序单元等。
模拟单元图的符号包括:模拟和数字信号识别用的限定符号,放大器,函数器,信号转换器,电子开关等。
电气设备常用文字符号
  1、基本文字符号
空气调节器
带瞬时动作的限流保护器件
限压保护器件
同步发电机
异步发电机
带延时动作的限流保护器件
过流继电器
带瞬时、延时动作的限流保护器件
延时继电器
同步电动机
力矩电动机
电流互感器
电动机保护开关
电源互感器
电压互感器
&  2、辅助文字符号
电流、模拟
延时、数字
主、中间线
压力、保护
保护接地与中性共用
不接地保护
置位、定位
温度、时间
无干扰接地
速度、电压、真空
&图形符号大全:
图 形 符 号
开关(机械式)电气图形符号
多级开关一般符号单线表示
多级开关一般符号多线表示
接触器(在非动作位置触点断开)
接触器(在非动作位置触点闭合)
负荷开关(负荷隔离开关)电气图用图形符号
具有自动释放功能的负荷开关
熔断器式断路器
熔断器一般符号
跌落式熔断器
熔断器式开关
熔断器式隔离开关
熔断器式负荷开关
当操作器件被吸合时延时闭合的动合触点
当操作器件被释放时延时闭合的动合触点
当操作器件被释放时延时闭合的动断触点电气图用图形符号
当操作器件被吸合时延时闭合的动断触点
当操作器件被吸合时延时闭合和释放时延时断开的动合触点
按钮开关(不闭锁)
旋钮开关、旋转开关(闭锁)
位置开关,动合触点
限制开关,动合触点
位置开关,动断触点
限制开关,动断触点
热敏开关,动合触点
注:&可用动作温度代替
热敏自动开关,动断触点
注:注意区别此触点和下图所示热继电器的触点
具有热元件的气体放电管荧光灯起动器
动合(常开)触点
注:本符号也可用作开关一般符号
动断(常闭)触点
先断后合的转换触点
当操作器件被吸合或释放时,暂时闭合的过渡动合触点
座(内孔的)或插座的一个极
插头(凸头的)或插头的一个极
插头和插座(凸头的和内孔的)
接通的连接片
双绕组变压器
三绕组变压器
自耦变压器
电抗器扼流图
&&&&& 电流互感器
脉冲变压器
具有两个铁芯和两个二次绕组的电流互感器
在一个铁芯上具有两个二次绕组的电流互感器
具有有载分接开关的三相三绕组变压器,有中性点引出线的星形-三角形连接
三相三绕组变压器,两个绕组为有中性点引出线的星形,中性点接地,第三绕组为开口三角形连接
三相变压器
星形-三角形连接
具有有载分接开关的三相变压器 星形-三角形连接
三相变压器
星形-曲折形连接
操作器件一般符号
具有两个绕组的操作器件组合表示法
热继电器的驱动器件
气体继电器
自动重闭合器件
电阻器一般符号
可变电阻器
可调电阻器
滑动触点电位器
预调电位器
电容器一般符号
可变电容器
可调电容器
双联同调可变电容器
指示仪表(星号必须按规定予以代表)
无功电流表电气图形符号
最大需量指示器(由一台积算仪表操作的)
无功功率表
功率因素表
温度计、高温计(&可由t代替)
积算仪表、电能表(星号必须按规定予以代替)
安培小时计
电能表(瓦特小时表)
无功电能表
带发送器电能表
由电能表操纵的遥测仪表(转发器)
由电能表操纵的带有打印器材的遥测仪表(转发器)
屏、盘、架一般符号 注:可用文字符号或型号表示设备名称
列架一般符号
人工交换台、中断台、测量台、业务台等一般符号
控制及信号线路(电力及照明用)
原电池或蓄电池
原电池组或蓄电池组
带抽头的原电池组或蓄电池组
接地一般符号
接机壳或接底板
无噪声接地
电缆终端头
电力电缆直通接线盒
电力电缆连接盒,电力电缆分线盒
控制和指示设备
报警启动装置(点式-手动或自动)
线型探测器
火灾报警装置
GB/T00新版符号
电流和电压的种类
电压可标注在符号右边,系统类型可标注在左边
频率值或频率范围可标注在符号的右边
示例:50Hz
~100&60kHz
示例:交流,频率范围100kHz到600Hz
3/N~400/230V
电压值也可标注在符号右边,相数和中性线数可标注在符号左边
示例:交流,三相带中性线,400/230V 50Hz
示例:交流,三相,50 Hz,具有一个直接接地点
3/N~50Hz/TN-S
且中性线与保护导体全部分开的系统(表示三相带中性线过去曾允许用3N,3+N,现在规定只能用3/N)
中性(中性线)
导线和连接器件、插头插座、电缆终端头
端子和导线的连接
在T型连接符号中增加连接点符号
导体的双重连接
形式2仅在设计认为必要时使用(如果是多重连接,在画图容易产生混淆时,连接的画黑点,不连接的不画黑点)
接通的连接片
电阻器& 一般符号
(矩形的长宽比约为3:1)
可调电阻器
(由电阻器一般符号和可调节性通用符号组成)
电容器,一般符号
半导体管和电子管
半导体二极管
半导体二极管一般符号
无指定形式的三极晶体闸流管
若没有必要指定控制撮的类型时,本符号用于表示反向阻断三极晶体闸流管
半导体三极管
PNP半导体管
集电极接管壳的NPN半导体管
NPN型半导体三极管
半导体管和电子管
光敏、光电子半导体
光电二极管
具有非对称导电性的光电器件
电机、变压器及变流器
直流串励电动机
异步电动机
三相鼠笼式异步电动机
单相鼠笼式有分相绕组引出端的异步电动机
三相绕线式异步电动机
电机、变压器及变流器
变压器和电抗器
双绕组变压器
瞬时电压的极性可以在形式2中表示示例:
示出瞬时电压极性的双绕组变压器
注入绕组标记端的瞬时电流产生助磁通
三绕组变压器
常用的其他符号
接地、接机壳和等电位
接地,一般符号
地,一般符号
如果接地的状况或接地目的表达得不够明显,可加补充信息
抗干扰接地,无噪声接地
此符号可代替接地一般符号以表示接地连接具有专门的保护功能,例如在故障情况下防止电击的接地
开关、控制和保护装置
两个或三个位置的触点
动合触点,也称常开触点
在许多情况下,也可作为,一般开关符号使用
注意,动触点必须偏向左边,且动触点与静触点是断开的
动断触点,也称常闭触点
注意动、静触点必须偏向右边,且动、静触点在图形符号上是连接的
先断合后的转换触点
注意将该符号与先合后断的转换触点区别开来。
常用于表示控制开关或继电器的触点
开关、控制和保护装置
当操作器件被吸合时延时闭合的动合触点
注意起延时作用的圆弧符号的方向,它表明触点朝圆弧中心方向的运动是延时。该符号在IEC617&7中只有此唯一一种形式
当操作器件被释放时延时断开的动合触点
当操作器件被吸合时,延时断开的动断触点
当操作器件被释放时,延时断开的动断触点
测量仪表、灯和信号器
灯和信号器件
灯,一般符号
信号灯,一般符号
如果要求指示颜色,则在靠近符号处标出下列代码:
RD&红;YE&黄;GN&绿;DU&蓝;WH&白
如果要求指出灯的类型,则在靠近符号处标出下列代码:
Ne&氖;Xe&氙;Na&钠气;Hg&汞;I&碘;IN&白炽;EL&电发光;ARC&弧光;FL&荧光;IR&红外线;UV&紫外线;LED&发光二极管
闪光灯信号
电力照明和电信布置
插座和开关
(电源)插座一般符号
(电源)多个插座(示出三个)
带保护接点(电源)插座
具有护板的(电源)插座
开关,一般符号
暗装、密闭、防爆符号已取消
该符号系GB4728&85标准,且是IEC617&1983标准的派生符号,必要时可部分采用
单极拉线开关
单极限时开关
&开关符号:
&行程开关行图形符号:
&按钮图形符号:
&&时间继电器触点符号:C语言(3)
在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。
对于它们,下列三条规则使用:
①&同名的强符号只能有一个,否则编译器报&重复定义&错误。
②&允许一个强符号和多个弱符号,但定义会选择强符号的。
③&当有多个弱符号相同时,链接器选择占用内存空间最大的那个。
二、哪些符号是弱符号?
我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错:
这种符号的定义可以被称为强符号(Strong Symbol)。有些符号的定义可以被称为弱符号(Weak Symbol)。对于C语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号(C++并没有将未初始化的全局符号视为弱符号)。我们也可以通过GCC的&__attribute__((weak))&来定义任何一个强符号为弱符号。注意,强符号和弱符号都是针对定义来说的,不是针对符号的引用。比如我们有下面这段程序:
上面这段程序中,&weak&和&weak2&是弱符号,&strong&和&main&是强符号,而&ext&既非强符号也非弱符号,因为它是一个外部变量的引用。
下面一段话摘自:
In&, a&weak symbol&is a symbol definition in an&&or&&that may be overridden by other symbol definitions.
Its value will be&zero&if no definition is found by the loader.
换句话说,就是我们可以定义一个符号,而该符号在链接时可以不解析。
让我们再看一些例子:
很明显,不能编译通过,因为'undefined reference' :
那么,如果将符号f声明成弱符号,会怎么呢?
居然编译通过了,甚至成功执行!让我们看看为什么?
首先声明了一个符号f(),属性为weak,但并不定义它,这样,链接器会将此未定义的weak symbol赋值为0,也就是说f()并没有真正被调用,试试看,去掉if条件,肯定core dump!
我们可以通过nm来查看符号:
如果我们在另一个文件中定义函数f,与week.c一起编译链接,那么函数f就会正确的被调用!
我们甚至可以定义强符号来override弱符号:
或者如下:
那么当出现multiple symbols时,会如何呢?
关于最后一个例子,我想补充的是:如果我们改变给出的编译顺序会怎么样呢?比如像下面这样编译:
看,我将w1.o放在最前面,不过链接器依然选择强符号,这是我们所期望的。
不过,如果我们这样做:
再改成这样编译:
看,情况有变!这是为什么?
原因就是GCC(准确地说是链接器)对待库是不一样的 —— 默认的,链接器使用第一个找到的符号,后面的就不搜索了。
不过我们也可以强制链接器搜索所有的库,办法如下:
重新如下操作:
现在可以了,尽管-lw在前!
&让我们再来看一个具体的例子:
在gcc中编译得到如下结果:
我们可以看到,在main.c和test.c都有一个global_var1,在main.c中的为强符号,在test.c中的为弱符号。因为在test.c中global_var1没有初始化,所以根据规则②得知:编译器选择main.c中的global_var1的值初始化那片内存。不要误认为在test.c中使用global_var1时是用的main.c中的global_var1,我之前错误得这样认为。其实是这样的:main.c中的global_var1和test.c中的global_var1引用的时同一块内存区域,只是在两个文件中代表的意义不同
&---- 在main.c中代表一个int型变量,在test.c中代表一个double型变量,它们的起始地址相同,但占用内存空间是不同的, 在main.c中占用4个字节,在test.c中占用8个字节,这点从上图的两个sizeof输出结果中可以得到验证。
& & & & 因为在test.c中的global_var1占用八个字节,memset(&global_var1, 0, sizeof(global_var1))将这块内存区域清零,这也就解释了为什么调用fun之后,global_var1和global_var2都变成0的缘故。
可见在test.c中对global_var1的改动会影响main.c中global_var1和global_var2的值。当程序很大时,这种错误很难发现,所以尽量避免不同类型的符号在多个文件中
三、如何避免呢?
1、上策:想办法消除全局变量。全局变量会增加程序的耦合性,对他要控制使用。如果能用其他的方法代替最好。
2、中策:实在没有办法,那就把全局变量定义为static,它是没有强弱之分的。而且不会和其他的全局符号产生冲突。至于其他文件可能对他的访问,可以封装成函数。把一个模块的数据封装起来是一个好的实践。
3、下策:把所有的符号全部都变成强符号。所有的全局变量都初始化,记住,是所有的,哪怕初始值是0都行。如果一个没有初始化,就可能会和其他人产生冲突,尽管别人初始化了。(自己写代码测试一下)。
4、必备之策:GCC提供了一个选项,可以检查这类错误:-fno-common。
参考链接:
&(GCC Weak Symbols)
&(&什么是weak symbol?)
&(Understand
Weak Symbols by Examples)
Resolution, Weak Symbols, How compiler resolves multiple Global Symbols)
& (&Dealing with multiply defined symbols)
(弱符号与强符号概念)
&(分享两个强符号,弱符号引起的编译问题)
&(强符号 弱符号)
最近在看《程序员的自我修养》,知道现在的编译器和链接器支持一种叫COMMOM块(Common Block)的机制,这种机制用来解决&一个弱符号定义在多个目标文件中,而它们的类型又不同(即大小不同)&的情况。
在目标文件中,编译器将未初始化的全局变量放在了COMMON段,未初始化的静态变量(包括全局和局部静态变量)放在BSS段。
---------------------------------------------------------------------------------------------------------------------------------------
对于全局变量来说,如果初始化了不为0的值,那么该全局变量存储在.data段;
如果初始化的值为0, 那么将其存储在.BSS;(依然是强符号)
如果没有初始化,那么编译时将其存储在COMMON块,等到链接时再将其放入到.BSS段。(这点不同的编译器会有所不同,有的编译器会直接把没有初始化的全局变量放在.BSS段,而没有COMMON块机制)
---------------------------------------------------------------------------------------------------------------------------------------
为什么这样处理呢?
我们可以想到,当编译器将一个编译单元编译成目标文件的时候,如果该编译单元包含了弱符号(未初始化的全局变量就是典型的弱符号),那么该弱符号最终所占空间的大小此时是未知的,因为有可能其他编译单元中同符号名称的弱符号所占的空间比本编译单元该符号所占的空间要大。所以编译器此时无法为该弱符号在BSS段分配空间,因为所需要的空间大小此时是未知的。但是链接器在链接过程中可以确定弱符号的大小,因为当链接器读取所有输入目标文件后,任何一个弱符号的最终大小都可以确定了,所以它可以在最终的输出文件的BSS段为其分配空间。所以总体来看,未初始化的全局变量还是被放在BSS段。&&&&&&
------摘自《程序员的自我修养》
来看一个例子:
&编译成目标文件:
得到aa.o 和 bb.o两个目标文件
来看看他们的符号表
可以清楚的看到,在两个目标文件中,Ndx数值都是COM,表示此时它们被放在COMMON块。在aa.o中global的大小是4个字节,在bb.o中global的大小是8个字节。
那么这两个目标文件链接生成可执行文件后,global的大小是多少呢? -- 当不同的目标文件需要的COMMON块空间大小不一致时,以最大的那块为准。
得到可执行文件cc
果然,global最终的大小为8个字节。
&所以总体来看,未初始化全局变量最终还是被放在BSS段的。
如果我们给aa.c中的global赋值把它变成强符号呢?如下:
得到两个目标文件后查看符号,aa.o中global放在.data段,bb.o依然放在COMMON块,最终的cc中global大小4字节,这很好的验证了本文一开始的第二条规则。
&可是有例外情况,看下面程序:
aa.c和bb.c中global都是弱符号,如果按照上面的规则的话,最终的可执行文件中global的大小应该是8个字节,可惜结果并不是我们所期望的:
看到没,最终的可执行文件cc中global所占内存却是4个字节!为什么? 下面是我在ELF文档里找到的一段:
---------------------------------------------------------------------------------------------------------------------------------------
Global and weak symbols differ in two major ways.
(全局符号和弱符号的区别主要在两个方面。)
When the link editor combines several relocatable object files, it does not allow multiple definitions of STB_GLOBAL symbols with the same name. On the other hand, if a defined global symbol exists, the appearance of a weak symbol with the same name will not
cause an error. The link editor honors the global definition and ignores the weak ones. Similarly, if a common symbol exists (i.e., a symbol whose st_shndx field holds SHN_COMMON), the appearance of a weak symbol with the same name will not cause an error.
The link editor honors the common definition and ignores the weak ones.
(* 当链接器链接几个可重定位的目标文件时,它不允许具有STB_GLOBAL属性的符号以相同名字进行重复定义。另一方面,如果一个已定义的全局符号存在,则即便另一个具有相同名字的弱符号存在也不会引起错误。链接器将认可全局符号的定义而忽略弱符号的定义。与此相似,如果一个符号被放在COMMON块(就是说这个符号的 st_shndx 成员的值为SHN_COMMON),则一个同名的弱符号也不会引起错误。链接器同样认可放在COMMON块符号的定义而忽略其他的弱符号。)
---------------------------------------------------------------------------------------------------------------------------------------
至于为什么这样处理,目前我还不得而知,如果读者知道的话,麻烦告诉我一下^_^!
再来看一种情况!如下:
结果却是:
&看到没,同样都是弱符号,却因为编译顺序的不同,可执行文件中的大小也不同,为什么会这样,目前我也是不得而知!
简而言之,在目标文件中没有将未初始化的全局变量像未初始化的静态变量那样放在BSS段,而是放在COMMON块,是因为现在的编译器和链接器允许不同类型的弱符号存在,最本质的原因是链接器无法判断各个符号的类型是否一致。
有了COMMON块之后就可以很好的解决这个问题了。
编程中我们可以使用GCC的“-fno-common”把所有的未初始化的全局变量不以COMMON块的形式处理,也可以使用“__attribute__ ((nocommon))”,如下:
一旦一个未初始化的全局变量不是以COMMON块的形式存在,那么它就相当于一强符号,如果其他目标文件中还有同一个变量的强符号定义,链接时就会发生符号重复定义错误。
参考链接:
(通过未初始化全局变量,研究BSS段和COMMON段的不同)
&(&C++ and the linker)
&(&Beginner's Guide to Linkers)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43次
排名:千里之外

我要回帖

更多关于 剪力墙钢筋标注 的文章

 

随机推荐