本文目录一览:
- 1、用C语言可以写操作系统吗?
- 2、为什么C语言比较适合编写系统软件?C语言是哪位计算机专家设计出来的?最早用C语言写的操作系统是哪种
- 3、C语言内存重写和内存遗漏是什么意思?什么情况下会发生呢?
- 4、C语言诞生的时候,是在什么操作系统下运行的?
用C语言可以写操作系统吗?
C语言当然是可以写操作系统的,但是操作系统的编写一般都不仅仅只是用C语言编写的。
写操作系统需要编程语言提供以下几个特征:
1、跨平台,不能是只在某个平台下编译(VB就不行);
2、必须是编译型语言(PHP就不行),或者有一个非常高效的解释器;
3、必须有方便的操作硬件的功能,容易嵌入汇编(Java就不行);
4、兼容性要好,最好不同编译器编译的符号要基本相同,容易链接(C++不行,如果放弃Class的话C++基本可以);
5、编译器本身最好是由该语言自己完成的(大部分语言的编译器都是用C/C++写的);
6、开发者可以很方便的扩展、改造、或者使用第三方的运行库(大部分语言的库都无法修改);
7、开发者众多(小众语言就不行);
8、该语言开发操作系统的资料要足够完善。
所以总结下来,C语言是首选。
为什么C语言比较适合编写系统软件?C语言是哪位计算机专家设计出来的?最早用C语言写的操作系统是哪种
简单来说,C语言写操作系统,是因为它快。最快是计算机底层机器码,然后是汇编语言,之后就是C了。其它的一些特性,如直接操作内存等等就不多说了。
C语言由美国贝尔实验室开发的,最早开放出来就是为了重写Unix系统的
C语言内存重写和内存遗漏是什么意思?什么情况下会发生呢?
没怎么听过这个概念,但是我觉得你说的应该是内存溢出和内存泄露这两个问题
内存溢出也就是定义的变量长度不足,内存不够储存数据导致数据超出界限,这通常是由于数据长度判断不严格造成的。好比只定义了一个能装5个苹果的盒子却要装8个苹果,剩下的3个只能放到其他苹果的位置了,其他的苹果就等于是被“重写”了
例子,定义了int a[2]变量,再定义int *p = a,当用p[2] = 0写入数据时,就发生了内存溢出。由于c语言只检查指针是否有效(能读写),这就可能导致指针被赋予一个特殊的值,比如指向程序代码部分,这时候往指针中写入的数据就有可能覆盖原本的命令,而且有可能被程序或者系统运行。还有一种情况就是错误的指针可能意外的修改了其他变量的值,这个通常在结构体变量中发生。
一句话就是溢出的内存
内存泄露就是给指针分配了内存却并未做回收,导致系统一直认为你正在使用这块内存,当不再有指针指向这块内存,也就是无法正常手动回收时,就造成了内存泄露。内存泄露会导致系统可用内存越来越少,直到再无内存可供分配或者程序被终止。由于系统自身代码缺陷而存在的内存泄露,由于除非关机重启,系统一直在运行,会导致泄露的内存一直得不到回收,最终内存耗尽系统崩溃死机
C语言诞生的时候,是在什么操作系统下运行的?
C语言诞生于UNIX操作系统,但C语言诞生后,又重写了UNIX系统,现在通行的UNIX版本绝大部分代码都是C语言编写的,这使得系统易读,易修改,易移植。作为一个多用户,多任务的分时操作系统。UNIX的系统结构可分为三部分:操作系统内核(是UNIX系统核心管理和控制中心,在系统启动或常驻内存),系统调用(供程序开发者开发应用程序时调用系统组件,包括进程管理,文件管理,设备状态等),应用程序(包括各种开发工具,编译器,网络通讯处理程序等,所有应用程序都在Shell的管理和控制下为用户服务)。