编译(compilation , compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
解释执行
1解释执行不依赖于平台,因为编译器会根据不同的平台进行解析。例如JS语言无论在windows平台还是在unix平台都可以使用。故可移植性强
2使用解释执行的程序我们一般称为解释程序。它将源语言直接作为源程序输入,解释执行解释一句后就提交计算机执行一句,并不形成目标程序。如在终端上打一条
命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这种工
作方式非常适合于人通过终端设备与计算机会话
直接点吧,编译执行就是先将程序翻译成机器代码,以后运行的都是机器代码解释执行就是,代码跟着走,每运行一次,编译一次解释执行也分为两种,一种是执行一句,编译一句,一种是编译完全部代码,再执行
为了解决Unix自定义结构在GCC优化编译中对齐问题,一般解决办法是用如下宏封装
自定义结构
#pragma pack(1)
struct my_arphdr
{
};
#pragma pack()
如果是SPARC/Solaris,还可以这样
struct my_arphdr
{
} __attribute__ ((packed));
两种办法其实都可以用在Unix系统/GCC编译器中。
D: mbuf@smth
关于结构中字节对齐问题,相应编译器选项为
GCC/G++ : -fpack-struct
Sun Workshop cc/CC: -misalign
最好不这样做,会大大降低程序效率,特别在某些架构中。应该尝试用位 *** 作来处理。
D: Unknown@smth
GCC可以这么解决
#ifdef __GCC__
#define PACKED __attribute__((__packed__))
#else
#define PACKED
#endif
struct msg
{
u_int16_t PACKED first;
};
还是 VC 简单,#include <pshpack1h> 就搞定了
A: gfh_nuaa
DEC : #pragma pack(1)
SUN : #pragma pack(1)
AIX : 编译时 -q align=packed
HP-UX : #pragma pack 1
D: Joe Durusau
在 Visual C++ 中,使用 "-ZP1" 就可以让编译器对自定义结构进行单字节对齐,实
际就是取消了对齐优化。
A: law@apuedhsorg 2001-12-20 13:09
1) 结构内部成员的pack
struct foo
{
char a;
int b __attribute__ ((packed));
};
2) 整个结构的pack
struct foo
{
char a;
int b;
}__attribute__ ((packed));
3) 文件范围的pack
#pragma pack(1)
struct foo
{
char a;
int b;
};
4) 编译选项的pack
-fpack-struct
但这是最危险的做法,因为这样做可能会使库函数和你的程序对结构内成员的偏移理
解不一致。
以上就是关于编译和解释程序都是什么全部的内容,包括:编译和解释程序都是什么、怎样设置gcc编译出程序的struct member align、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)