预处理,编译预处理和运行的区别

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)编译程序预处理干什么_百度知道
编译程序预处理干什么
我有更好的答案
它在C编译系统对源程序进行编译之前、文件包含和条件编译,先对程序中这些命令进行“预处理”。编译预处理命令的三种不同形式:宏定义编译预处理是C语言区别于其它高级程序设计语言的特征之一,它属于C语言编译系统的一部分。C程序中使用的编译预处理命令均以#开头
采纳率:32%
1.掌握宏定义的方法
2.掌握文件包含方法
3.掌握条件编译的使用方法
为您推荐:
其他类似问题
编译程序的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。共被编辑 3 次
修正错别字及语法
开发的时候最好是加上这句$pdo-&setAttribute(PDO::ATTR_EMULATE_PREPARES,false),这样如果支持本地预处理则会使用本地预处理,在不支持的情况下会自动使用模拟预处理方式。
使用模拟预处理的方式是在客户端本地执行预处理的模拟,最终将拼好的sql语句发送到mysql服务器进行执行(实际上就是完成了字符串拼接,据说对表名使用占位符会出现sql注入,我没有验证过),mysql会对sql进行parsing-&resolution-&optimization-&execution。使用本地预处理方式则是分两步:第一步是prepare阶段,发送带有占位符的sql语句到mysql服务器(parsing-&resolution),然后就可以多次发送占位符参数给mysql服务器进行执行(多次执行optimization-&execution)。
使用模拟预处理方式实际上就是一次发送完整的sql给mysql执行,不需要mysql做额外处理(如保存会话状态等),因此性能比较好一些,而使用本地预处理则需要多次发送,mysql服务器需要保存会话状态,性能上会有一些损耗。
另外,使用本地预处理的一个好处是在prepare阶段就能检测出sql语句的错误,而使用模拟的预处理方式制定在exec阶段才能发现(因为模拟方式拼接好sql在exec阶段才会发送到mysql服务器)。
总之,为了安全,那一点性能损耗算得了什么,如果没有什么理由不加,那还是加上吧。
开发的时候最好是加上这句$pdo-&setAttribute(PDO::ATTR_EMULATE_PREPARES,false),这样如果支持本地预处理则会使用本地预处理,在不支持的情况下会自动使用模拟预处理方式。
使用模拟预处理的方式是在客户端本地执行预处理的模拟,最终将拼好的sql语句发送到mysql服务器进行执行(实际上就是完成了字符串拼接,据说对表名使用占位符会出现sql注入,我没有验证过),mysql会对sql进行parsing-&resolution-&optimization-&execution。使用本地预处理方式则是分两步:第一步是prepare阶段,发送带有占位符的sql语句到mysql服务器(parsing-&resolution),然后就可以多次发送占位符参数给mysql服务器进行执行(多次执行optimization-&execution)。
使用模拟预处理方式实际上就是一次发送完成的sql给mysql执行,不需要mysql做额外处理(如保存回话状态等),因此性能比较好一些,而使用本地预处理则需要多次发送,mysql服务器需要保存回话状态,性能上回有一些损耗。
另外,使用本地预处理的一个好处是在prepare阶段就能检测出sql语句的错误,而使用模拟的预处理方式制定在exec阶段才能发现(因为模拟方式拼接好sql在exec阶段才会发送到mysql服务器)。
总之,为了安全,那一点性能损耗算得了什么,如果没有什么理由不加,那还是加上吧。
开发的时候最好是加上这句$pdo-&setAttribute(PDO::ATTR_EMULATE_PREPARES,false),这样如果支持本地预处理则会使用本地预处理,在不支持的情况下会自动使用模拟预处理方式。
使用模拟预处理的方式是在客户端本地执行预处理的模拟,最终将拼好的sql语句发送到mysql服务器进行执行(实际上就是完成了字符串拼接,据说对表名使用占位符会出现sql注入,我没有验证过),mysql会对sql进行parsing-&resolution-&optimization-&execution。使用本地预处理方式则是分两步:第一步是prepare阶段,发送带有占位符的sql语句到mysql服务器(parsing-&resolution),然后就可以多次发送占位符参数给mysql服务器进行执行(多次执行optimization-&execution)。
使用模拟预处理方式实际上就是一次发送完成的sql给mysql执行,不需要mysql做额外处理(如保存回话状态等),因此性能比较好一些,而使用本地预处理则需要多次发送,mysql服务器需要保存回话状态,性能上回有一些损耗。
总之,为了安全,那一点性能损耗算得了什么,如果没有什么理由不加,那还是加上吧。
我要该,理由是:关于C/C++程序预处理、编译、连接到执行的过程
源文件hello.c(文本)--&预处理器----&hello.i(文本)
预处理器:将#include 包含的文件内容插入该命令处,检查全文处理#define宏定义,处理条件编译命令
#if& #endif&
将不需要的code屏蔽掉,处理完毕后生成修改后的源代码hello.i.
hello.i(文本)----&编译器------&hello.s(汇编程序 文本)
编译器:词法分析语法分析,生成一条条的汇编语句如mov ax,bx,相当于是优化后的汇编语言的源文件。
hello.s(汇编文本)------&汇编器----&hello.o(目标文件 二进制)
&&汇编器:将汇编源文件翻译成对应的机器指令,而且还写入一些东西与机器指令打包成可重新定位目标程序格式的文件hello.o
hello.o(目标文件二进制)----&连接器----&hello.exe(可执行目标文件
连接器:比如说hello.o里调用了标准库里函数eg prinf
,连接器的工作就是找到prinf所在的目标文件xx.o或是xx.lib然后将该程序插入到我们的hello.o中,具体来说,其细节是什么,如何找到xx.o呢?是不是只并入用到的函数呢?
关于hello.exe执行:
&&&在OS下运行程序时候,比如说我们double
click一个xx.exe的图标,先是OS调用它一个叫做Loader加载器的函数,它读取分析可执行文件中的相关信息后,将其代码和数据拷贝到Memory中,然后进行一些操作后(?)将控制转移到这个程序。
6 关于目标文件Object
类别:可执行的目标文件
可重定位的目标文件
&共享目标文件(特殊的可重定位目标文件,load time或run time
时动态加载和link)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。文件包含命令、编译预处理命令、C预处理器指令三者有什么区别吗?_百度知道
文件包含命令、编译预处理命令、C预处理器指令三者有什么区别吗?
我有更好的答案
书写&quot所谓文件包含语句,如#到当前#include语句位置,可以实现将另一个文件&quot。编译预处理指令是在编译前的处理指令
来自:求助得到的回答
采纳率:82%
来自团队:
为您推荐:
其他类似问题
预处理器的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 预处理 编译 汇编 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信