linux中size的问题

luosimuer 2011-09-15 11:04:14
我编写了一个简单的C程序 想要用size查看代码段等信息

程序如下:
#include <stdio.h>

int main()
{
printf("hello\n");

return 0;
}

之后我用gcc编译生成hello这个可执行文件

ll hello显示:
-rwxr-xr-x 1 linux linux 6402 test 22:00 hello

size hello显示:
text data bss dec hex filename
837 268 4 1109 455 hello

我不明白size hello显示的这些数值的具体意义,这些数字都代表什么?请高手帮我解答一下,谢谢!!!
...全文
301 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
man readelf

---------

The size returned from ls is probably the size of the file on the file system instead of the actually size of the file. That's why the numbers you got vary from one OS to another.
  • 打赏
  • 举报
回复
try readelf -a hello
Athenacle_ 2011-09-16
  • 打赏
  • 举报
回复
837+268+4=1109=0x455

yel617 2011-09-16
  • 打赏
  • 举报
回复
过来学习
luosimuer 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 micropentium6 的回复:]

try readelf -a hello
[/Quote]

使用readelf -a hello我得到了很多信息 但是看不懂 而且信息太多了
应该怎么分析呢?请给我解答一下 谢谢!
luosimuer 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 athenacle_ 的回复:]

837+268+4=1109=0x455
[/Quote]

恩 这个我知道 但是size得到的1109和ll得到的6402不同 是不是因为我没有strip 里面有符号链接之类的东西 所以ll得到的数值要比size得到的数值大很多呢?另外就是我的程序中没有未初始化的全局变量或者静态变量 为什么得到的bss的数值是4呢?

还有就是我得到ll和size的值都是在ubuntu 8.04系统上得到的:
{
ll hello显示:
-rwxr-xr-x 1 linux linux 6402 test 22:00 hello
size hello显示:
text data bss dec hex filename
837 268 4 1109 455 hello
}
同样的程序原封不动的放到fedora 13上运行得到的值都不一样,如下:
{
ll hello显示:
-rwxrwxr-x 1 user user 4683 01:02 hello
size hello显示:
text data bss dec hex filename
1029 252 8 1289 509 hello
}
这是不是和不同的操作系统有关系呢?我用的都是虚拟机

这次问题有些多 我弄了一晚上也没有完全弄明白 所以还请帮我解答 谢谢!!!
luosimuer 2011-09-15
  • 打赏
  • 举报
回复
另外,我查了一下:
text表示正文段大小,data表示包含静态变量和已经初始化(可执行文件包含了初始化的值)的全局变量的数据段大小,bss由可执行文件中不含其初始化值的全局变量组成。

意义是明白了 但是如何和我size hello得到的结果对应起来呢?为什么我size hello之后得到的值是:
text data bss dec hex filename
837 268 4 1109 455 hello
luosimuer 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 athenacle_ 的回复:]

请看C专家编程。
[/Quote]

另外就是ll hello得到的6402和size hello中得到的1109有什么关系呢?不都是hello的大小吗?
我是菜鸟 请帮我详细解答一下吧 谢谢!
Athenacle_ 2011-09-15
  • 打赏
  • 举报
回复
请看C专家编程。
内容概要:本文针对传统三电平并网逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应滞后等问题,提出了一种基于有源点箝位(ANPC)三电平逆变器的高性能并网控制策略。该策略融合了双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术和电网电压前馈控制,构建了“精准同步-扰动补偿-优质调制”的一体化控制体系。通过Simulink搭建仿真模型,在稳态对称、电网不平衡及动态扰动等多种工况下进行验证,结果表明该复合控制策略能显著降低并网电流谐波,提升锁相精度,有效抑制功率波动,并大幅缩短系统动态调节时间,增强了逆变器在复杂电网环境下的稳定性与适应性。; 适合人群:从事电力电子、新能源并网、智能电网等相关领域的科研人员及工程技术人员,尤其适合具备一定MATLAB/Simulink仿真基础、专注于并网逆变器控制策略研究的研发人员; 使用场景及目标:①用于提升大功率并网逆变器在电网电压不平衡、骤升骤降等非理想工况下的运行性能;②为ANPC拓扑结构与先进控制算法(如DPWMA、前馈-反馈复合控制)的协同优化提供仿真依据和技术参考;③适用于新能源发电系统、工业变流装置等对电能质量和动态响应要求较高的应用场景; 阅读建议:建议读者结合文提出的控制架构图与仿真模型逐步复现,重点关注DPWMA调制实现、正负序分离锁相环设计及前馈补偿环节的参数整定,同时通过多工况仿真对比分析各项性能指标,深入理解各模块间的协同作用机制。
内容概要:本文以ANPC三电平并网逆变器为研究对象,提出了一种融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相与电网电压前馈控制的高性能并网控制策略。通过对ANPC拓扑结构的分析,阐明其在开关损耗均衡、点电位稳定和低输出谐波方面的硬件优势,为高质量并网奠定基础。在此基础上,DPWMA调制策略有效提升输出波形的等效开关频率,显著降低谐波含量;正负序分离锁相技术可精准提取电网正序分量,克服电网不平衡导致的锁相失真与电流不对称问题;电网电压前馈控制则增强系统对动态扰动的响应能力,缩短调节时间。文章构建了“信号采集—核心控制—调制驱动”的三层协同控制架构,并通过多工况仿真验证了该策略在稳态、不平衡及动态扰动条件下的优越性能,结果表明系统具备优异的电能质量、运行稳定性与抗扰能力。; 适合人群:电力电子、新能源并网、自动控制等相关领域的科研人员、研究生及从事逆变器设计与控制的工程技术人员。; 使用场景及目标:① 提升大功率并网逆变器在复杂电网环境下的运行稳定性与电能质量;② 解决电网电压不平衡、谐波畸变、电压骤变等工况下的锁相失真与电流不对称问题;③ 优化动态响应性能,应用于新能源发电、工业变流器等高可靠性要求场景; 阅读建议:建议结合Matlab/Simulink仿真平台,复现文控制策略与仿真模型,重点理解DPWMA调制实现方法、正负序分离锁相环设计及前馈-反馈复合控制结构的协同机制,并通过不同扰动工况测试系统鲁棒性。
内容概要:本文研究了基于Q-Learning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制的应用,旨在提升水下机器人在复杂、非线性及动态变化海洋环境的控制精度与自适应能力。通过将强化学习算法与传统PID控制深度融合,构建了一种能够在线自主调整PID参数的智能控制框架,有效克服了传统PID控制器在面对模型不确定性、外部干扰和时变系统特性时适应性不足的问题。研究详细阐述了AUV的动力学建模过程,并精心设计了Q-Learning算法的状态空间、动作空间与奖励函数,使其能在Matlab仿真环境通过不断的交互试错进行学习与优化,最终实现对航向角、深度等关键运动姿态的高精度、强鲁棒性控制。仿真结果充分验证了该方法在响应速度、稳态精度和抗干扰性能方面相较于传统方法的显著优越性,为智能水下装备的自主决策与控制提供了重要的理论依据和技术路径。; 适合人群:具备自动控制理论基础、强化学习初步知识及MATLAB编程能力的研究生、科研人员及从事智能机器人、无人系统控制开发的工程师。; 使用场景及目标:①应用于水下机器人、无人潜航器等复杂动态系统的智能控制设计;②解决传统PID控制器参数整定困难、环境适应性差和鲁棒性不足的关键问题;③推动强化学习等人工智能技术在实际工程控制系统的落地应用、性能优化与可靠性验证。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,重点关注Q-Learning与PID的耦合机制、状态量与奖励函数的设计原则,深入理解智能控制策略的训练收敛过程、超参数敏感性及其在不同工况下的性能表现。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧