2 prasso prasso 于 2014.11.23 21:57 提问

符号表在编译结束后会怎样?会被保存吗?

我是个新手,想大家指导一下。

1.符号表是在编译开始后建立的吗?
2.编译结束后,符号会怎样?会被保存吗?

2个回答

devmiao
devmiao   Ds   Rxr 2014.11.23 22:17

符号表在词法分析的时候被建立,编译完成,可以保留(如果希望编译的结果另外有用途,就保留),也可以丢弃。

prasso
prasso 回复devmiao: 也就是说,一般意义上,在理论上,编译过程中制造出符号表,结束的时候再删除符号表?符号表暂时存在一个过程,不会被保存?
大约 3 年之前 回复
devmiao
devmiao 回复prasso: 商业编译器往往需要输出调试符号、编译错误的结果等等额外信息,这就是另有用途,纯粹的教学上和理论上的编译器则不需要。
大约 3 年之前 回复
prasso
prasso 保存丢弃是谁决定的?一般情况下,编译器会保留还是丢弃?
大约 3 年之前 回复
eagleyan
eagleyan   Rxr 2014.12.01 04:47
  1. 符号表是在编译开始后建立的吗 - 编译分前端和后端,前端分词法分析,语法分析。词法分析就把符号表建立了。
  2. 编译结束后,符号会怎样?会被保存吗?-符号表在某些阶段非常有用,比如debug,所以在debug版本里面,符号表都保留了。但是release版一般不保留,首先是因为符号表往往很大,占用太多空间。其次是因为在后端处理时,优化程序可能会调整程序的执行顺序,导致符号表跟编译出来的程序不完全一致。(提醒一下,这也是为什么有时候在debug版本里面的行为是正确的,而release版本却不正确,这是优化导致的)
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!