C语言 使用oop(特别是方法调用)带来的性能下降是否明显,比如说,在低功率游戏控制台(arduboy)中?

64jmpszr  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(60)

我正在开发一种编程语言。因此,我必须做出设计决定。决定是否将方法实现为功能(这将使语言成为面向对象的语言)。
我的目标是将这种语言编译成与手持设备兼容的格式,比如arduboy nano和fx。
因此,我想知道,使用方法调用是否会对性能产生显著的影响
到现在为止我什么都没试过。我不确定测试性能的方法,因为我没有类似规格的Arduboy或手持设备。我试着在互联网上寻找意见,但没有找到。
官方的GitHub repo似乎是用C写的。因此,它不是面向对象的,因此它缺乏方法的使用。但是,这并不意味着方法对性能有任何显著影响(即,即帧率下降)

w8f9ii69

w8f9ii691#

我正在开发一种编程语言。
作为这样做的先决条件,研究现有的编程语言(如C和C++)以及它们如何将源代码转换为机器代码可能是明智的。
是否将方法实现为功能(这将使语言成为面向对象的语言)。
没有所谓的“面向对象语言”,只有或多或少支持OO特性的语言。面向对象是一种设计程序的方法。你的程序不会因为你使用某种语言而自动变成面向对象的。
基本OO的支柱是私有封装、自治对象和继承/多态性。这些 require 成员函数都不是这样的,尽管它们显然非常方便。就像RAII的构造函数/析构函数一样,但这仍然不是OO设计的要求。
使用方法调用是否会对性能产生显著影响
这取决于上下文。与普通函数相比,普通的static C对象不会(不应该)调用成员函数带来额外的开销。您可能从此类对象获得的唯一额外开销是由CRT调用的默认构造函数。
在使用继承/多态性的设计中,无论使用哪种语言,您都需要vtables,这些都会带来轻微的内存和函数调用开销。在某些情况下,它们还可能阻止函数内联。我不会称之为对性能的“显著”影响,但这是额外的开销。
一般来说,在像ATMega 8位这样的小型传统微控制器中,人们会避开这些东西,主要是因为RAM非常紧。为这样的MCU编写C代码甚至是一件新奇的事情--在20世纪90年代,这些程序中的大多数都是用汇编语言编写的,而C语言的普遍转换发生在21世纪初,大约在Arduino发布的时候。大约5到10年后,8比特的大部分已经从新设计中淘汰。
官方的GitHub repo似乎是用C写的。因此,它不是面向对象的
这不一定是真的。用C编写面向对象程序是完全可能的,就像在C
中不编写面向对象程序是很常见的一样--关键字class不会神奇地将程序设计变成面向对象。
然而,8位微控制器编程通常使用最少的抽象层来完成,因为这些MCU非常慢。“Framerate”可能不是一个东西对任何运行从一个8-苦;这些通常不具有DMA甚至。

相关问题