编译后老是这样,我不明白白?

编译gcc碰到问题,看不懂什么原因,怎么办?_百度知道不明白为什么VS2k5编译for的时候…… - Sumtec - 博客园
今天在做一个实验,突然发现一个不寻常的地方:VS2k5 C# 在编译for循环的时候,IL代码跟以前的方式不一样:&&&&& L_0029:
&&&&& L_002a:
<FONT color=#000000&&&&& L_002f:
&&&&& L_0031:
&&&&& L_0033:
&&&&& L_0035:
L_0018这个for循环的C#语句大致为for ( = <FONT color=#;
& <FONT color=#000000; ++)上面IL里面所显示的正是比较num1是否小于的片断,如果在VS2k3里面,则应该编译成:&&&&& L_0029:
&&&&& L_002a:
<FONT color=#000000&&&&& L_002f:
L_0018仔细再研究一下,发现这个变化只在Debug模式里面出现,也就是说这个变化并不是为了效率考虑的。但是原来的方式也能够比较容易的进行调试跟踪,实在搞不清楚为什么要用clt的方式。更加奇怪的是,在clt比较得出结果之后,还要弦弹出来保存到一个flag1的本地变量里面,然后再重新压栈。想了想,可能还是为了&#8220;更&#8221;方便的进行调适吧:比如说在IL级别进行调试的时候,可能看堆栈是不方便的,同时看两个变量的关系也是让人眼花的(n位数字比较,光是对齐数字就头痛了)。通过这样的IL变化,我们可以简单的看看flag1到底是什么结果。如果发现不对了,还可以在跳转之前把当前执行语句移到其他地方,或者修改转移条件,甚至不需要修改循环变量。这些在以前估计是不可能的,因为blt直接就判断并跳走了,就算可以修改转移条件,也必然影响循环变量i。如果考虑的更深入一点,我们可以简单的修改一条IL指令,使得flag恒为true或者false,强制控制流按照我们希望的方式去走,但是又不影响所有源代码里面的变量,这样子也许能够轻易的进行全覆盖的单元测试。不过这么强的能力目前好像还没有看到C#里面有相应的操作项,所以一切都只是猜测。真正的原因也许需要查找更多的资料,或者问问C#项目组的人员才知道了。顺便说一下,最新版本的Reflector好像有点奇怪,在同一个函数里面IL结构完全一样的两个循环,前面一个会被翻译成while,后面一个会被翻译成for,也不知道是从什么时候开始的。因为这个是在看VS2k5 C#的Release模式编译出来的程序发现的,我一开始还以为这是VS2k5的优化成果呢&#8230;&#8230;易语言 编译 后老是被认为是木马病毒....._百度知道编译后运行报错问题,求大神们指教
[问题点数:40分,结帖人guangguang210]
编译后运行报错问题,求大神们指教
[问题点数:40分,结帖人guangguang210]
只显示楼主
取消只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。原来编译器使用的是栈啊,我说怎一直不明白为什么把一块内存称为栈_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:251,431贴子:
原来编译器使用的是栈啊,我说怎一直不明白为什么把一块内存称为栈收藏
数据结构里面学的栈不止在程序中用,还在编译器中用,今天算是长点知识了。
c++海同强大的师资阵容,因人制定课程内容,分阶段学习.c++就到正规IT技术培训机构-海同科技,培训IT技术面对面教学,免费重读!
你的10等级签到上来的…
再帮你补点脑:一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束后由系统释放。4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码
就编译器来说,现在的编译器源码中,大量使用递归。而栈是递归的基础。没有栈你的函数就不能递归。如FORTRAN。这个常用的数据结构,解决了很多“高,大,上”的问题。
我准备开始学编译原理
,楼主可以交流交流不
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 不明白的女人后果自负 的文章

 

随机推荐