C#Pointervs.C++Pointer我一直在学习编程,我选择C++和C#编程作为我的第一语言。更具体地说,我有一本有人借给我的旧C书,我正在用它来学习C#。我使用VisualStudioExpress并用C++和C#编写。我感兴趣的一个领域是直接内存管理的能力。我正在尝试学习如何使用它来优化我的代码。但是,我正在努力做到这一点,但实际上并没有看到任何真正的性能提升。例如,下面是C#中的以下代码:unsafestaticvoidMain(string[]args){intsize=300000;char[]numbers=newchar[size];for(inti=0;ic;返回0;谁能告诉我为什么我的C#代码不会从我的引用或指针的使用中受益?我一直在网上阅读东西,但我被卡住了。C#已经生成指针,而无需您显式声明它们。每个引用类型的引用(例如数字变量)在运行时实际上是一个指针。使用ref或out关键字传递的每个参数在运行时实际上是一个指针。数组参数的确切C等价物是char**、char*和C++。C#没有区别。所以你看不到速度上的任何差异,因为实际执行的代码是相同的。这不是它停止的地方,你永远不会对数组做任何事情。你调用的方法会在运行时消失,就像在C或C++编译器中一样,它会被优化器内联。由于您不使用数组参数,因此您也不会获得任何代码。当您使用指针实际处理内存时,指针非常适合加速程序。您可以索引数组并确保您永远不会支付数组边界检查。在许多情况下,您也不会在正常使用情况下付费,如果抖动优化器知道索引始终是安全的,则删除检查是非常明智的。这是对指针的不安全使用,您可以随意写入不属于数组的内存部分,并以这种方式破坏GC堆。用于对象引用或ref参数的指针绝不是不安全的。查看其中任何一个的唯一真正方法是查看生成的机器代码。调试+Windows+反汇编窗口。重要的是,即使你调试了,代码还是要优化的,要不然你是看不到优化的。确保您正在运行发布版本并使用工具+选项、调试、常规,取消选中“在模块加载时抑制JIT优化”选项。需要熟悉机器代码才能理解您所看到的内容。问题是你没有测量你认为你正在测量的东西。我可以阅读您的代码并立即了解您为什么会得到这个或多个结果,而不仅仅是因为指针或指针。还有许多其他因素在起作用,或可能在起作用。各种评论反映了这一点。对于它的价值,一个C++调用比另一个调用慢得多的主要原因是因为复制std::string很慢而复制std::string很快。C#示例之间没有相似的差异顺序。我的建议是,作为一个聪明但早期的程序员,你的首要任务是成为一个更好的程序员。在您知道要实现的目标之前,不要担心“优化”。当您准备好真正理解问题时,您将不得不研究生成的代码。对于C#,它是MSIL,它在特定平台上是JIT。对于C++,英特尔代码可处理任何处理器。在了解什么是MSIL、JIT和操作码之前,很难解释为什么会得到这样的结果。以上就是C#学习教程分享的全部内容:C#指针和C++指针。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: