Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要使用C++;代替C#用于驱动程序级编程(系统级编程)_C#_C++_C_Operating System - Fatal编程技术网

为什么要使用C++;代替C#用于驱动程序级编程(系统级编程)

为什么要使用C++;代替C#用于驱动程序级编程(系统级编程),c#,c++,c,operating-system,C#,C++,C,Operating System,我必须开发一个测试应用程序来测试图形驱动程序的一些功能。 通过使用Microsoft公开的标准,如DXVAHD.h、DXVA2Api.h(Directshow)和其他Microsoft API。 因为C++中的编码与C++相比非常容易,为什么我们不能使用C? 是因为我们不能在C#中使用头文件(因为有包的概念) 能有人告诉我为什么在系统级编程时,人们更喜欢C,C++,而不是C?如有任何链接或学习资料,我们将不胜感激 提前感谢。C被称为中级语言,因为它实际上是在弥补机器级语言和更传统的高级语言之间的

我必须开发一个测试应用程序来测试图形驱动程序的一些功能。 通过使用Microsoft公开的标准,如DXVAHD.h、DXVA2Api.h(Directshow)和其他Microsoft API。 因为C++中的编码与C++相比非常容易,为什么我们不能使用C? 是因为我们不能在C#中使用头文件(因为有包的概念)

能有人告诉我为什么在系统级编程时,人们更喜欢C,C++,而不是C?如有任何链接或学习资料,我们将不胜感激


提前感谢。

C被称为中级语言,因为它实际上是在弥补机器级语言和更传统的高级语言之间的差距。用户可以使用c语言进行系统编程(用于编写操作系统)和应用程序编程(用于生成菜单驱动的客户计费系统)。所以它被称为中级语言

高级-Java-Ada、Modula-2、Pascal、COBOL、FORTRAN、BASIC

中间级-<强> java (通过C接口),C++,C,FEW,宏汇编


低级-汇编程序

当您编写系统软件或驱动程序时,您需要严格控制您的环境:内存使用、时间限制等

使用C#是不可能的。即使您忽略了这样一个事实,即您运行在一个VM之上,这会带来很大的开销,您仍然无法控制内存分配/释放策略,您永远无法确定GC线程何时会启动并阻塞您的工作线程,等等


除此之外,还有许多在C#中无法执行的低级操作:从读取/写入设备寄存器的值开始,或直接访问内存,然后执行更具体的任务
像DirectShow这样的流行API都有C#绑定。对于那些不需要的API,您可以通过将API封装在C++代码引用的C++/CLI程序集中来轻松创建自己的API。

闻起来像离题的指针。。。您通过引用内存而不是复制对象来传递对象。简短回答:C#被编译为托管字节码,它在运行“虚拟机”的字节码之上运行。驱动程序需要直接在真正的CPU上操作,并对需要执行的操作具有非托管内存访问权限。答案是。抽象使事情更容易做,但同时也使访问较低级别的内容变得更难。@2008年的VladL问题不一定代表当前的温和政策。SO的“章程”的一部分是与公告板/论坛相反,这就是为什么我觉得固有的主观问题应该更努力地证明它们的存在。这本书的核心是“C++与C#对于系统级编程,讨论”。“系统级编程”一开始是一个模糊的术语,但这篇文章并没有真正澄清这一点。如果你在写Ada和Pascal是高级别的,我会把Java和C#归为高级别,因为它比它们高,它使用的是JVM而不是bene。当然,Lukaz Niemier。,但这里我要说的是哪种语言是中间语言(绑定机器级语言之间的间隙)所以Java可以是高级和中级。Ada或Pascal也可以。Java只能通过C接口,通过JNI调用本机函数才能做到这一点。Pascal可以直接做到这一点,甚至可以与纯Asm代码链接。@Nicol Bolas..我以前也从未听说过这个词..但当读到它时..我接受它..@Mohamad我不确定它是不是真的NDOM低内容博客以略微蹩脚的英语写在技术术语的意义上是一个有权威的权威。我个人认为C是一种低级语言,而汇编是“仅仅是一种编程语言”,因为它在语言结构方面并没有提供多少(与指令的助记符相反)。从C++应用程序调用C++ API是没有问题的。使用C语言的真正问题是JIT编译语言在运行时的运行环境中的固有局限性,如.NET框架。如果它只是一个内部测试应用程序,那可能是无关紧要的。如果你是一个驱动程序制造商,将这个应用程序运送到大量的CuSTO。mers,你可能想重新考虑一下。还记得ATI的崩溃吗?他们在.NET Framework上编写的图形卡配置应用程序需要几分钟才能打开?非常尴尬。再说一遍,他/她不是在创建驱动程序,而是在创建一个测试驱动程序的普通应用程序。而.NET应用程序根本不需要几分钟就可以打开。他们做的是fir第一次,框架是在冷启动时初始化的。至少在一年前,硬件已经有了一些改进,但是软件的膨胀往往保持得很好。NET的加载时间比C++高,但是这可能是0.2秒。但是你描述的ATI应用程序听起来像是有一个重UI和一堆其他瘦的。Gs要初始化,而C++中也存在(思考游戏)。@作为一个ATI配置应用程序的USER1610015被严重地和可怕地蒙皮了,事实上,它被写在.NET中可能不单独解释减速。(有趣的是,MonoDevelop解释了为什么人们投票否决这个答案?我找不到任何不正确的地方。