跪求高手讲解 编绎器与OS的关系
编绎器与OS的关系是什么样的?
比如
如下代码
int a;
int *p=new int[100];
int b()
{
}
将其转化编绎的过程是由编绎器将其转化为2进制代码还是OS?如果是编绎器,那怎么知道怎么把语句转化为2进制代码呢?因为转化为2进制代码好像要跟硬件CPU指令集打交道吧,可它显然是不知道CPU的指令集啊,并且各个CPU指令集好像都是不一样的吧.
还有其连接过程呢?也有点不大清楚.
问题可能问的有些模糊,其实我就想知道编绎器工作中,OS起了什么作用,谢谢
[解决办法]
我理解是转化的是二进制代码。。。
os不过提供了一些库函数的接口。比如读文件。你就是调用了os中的接口。。。
无论是win32还是linux都是这样。
但特例是。net 和 java code。这些东西本质上还是脚本。
[解决办法]
我是这样理解的,错误之处还请指正:
OS本质上是对编译器(程序)提供硬件资源和必要的环境支持。
对于传统的C/C++编译环境来说,以你Windows中安装的Dev-cpp为例,他使用gcc.exe作为编译器,这个编译器当然与linux下的gcc不同,是有人把它移植到windows下的。gcc.exe根据编译时传入cpu参数(可在Dev-cpp中设置编译器选项)编译输出object文件(二进制),对于同一个源文件cpp在不同平台下传入cpu参数一样那么生成的object文件应该差别不大。在link阶段,由链接器把object文件和一些库、启动代码一并链接为可执行文件,这时平台差异体现出来了,也就是说那些库和启动代码是平台相关的。
可以简单得说:
编译是cpu相关(但大部分是兼容IBM PC x86),链接是平台相关(一般情况下在windows下不能生成linux可执行文件是因为没有对应的库文件,若提供的话当然是可以生成的)。
整个过程中OS对于开发环境是透明的。
[解决办法]
产生二进制代码并且是通用CPU指令集x86指令集.所以产生的代码的执行效率在高端平台上运行并不高且无法利用特有的指令集如SSE2,MMX等.如果要利用最新平台的特性就需要针对某一平台使用汇编这样就失去的平台迁移性.所以目前虚拟机执行是未来发展的方向(兼顾二者的优势)