八股文零散的收集

为什么Lua可以跨平台(为什么Lua可以与多种语言进行配合)
答:Lua底层是由c来编写的,而c是一个能被多种操作系统支持的语言,相当于Lua编写的逻辑被翻译为c,能够很方便的被机器执行,其他语言可以编写相关的代码去接受Lua返回的信息,这样就能达到Lua与其他语言之间的交互

c#类中的函数是否占用内存空间?
答:占,并且他不存储在堆栈内存中,而是存储在内存中的文本段(Text Segment),它是存储可执行程序的代码的内存段

c#中的函数是何时被加载到内存当中?
答:CLR会按照需求来加载程序集中的类型和成员,当程序执行到某个类中的函数时,(如果是第一次执行到)CLR会负责将该函数的IL代码编译为当前操作机器的本地代码,并将其加载到 本文段 中,一旦函数的代码被加载到内存中,通常会保留到程序退出为止。

c#中的函数中声明的临时变量,当函数被加载进内存时,所占的空间是否包含临时变量?
答:不包含,函数当中的临时变量,不论是值类型还是引用类型,都是在函数执行期间动态分配到堆或者栈的,栈上的内存由CLR动态管理,用完就会被销毁,堆上的内存由GC回收管理

c#委托的本质是什么,他是如何存储函数的
答:委托的本质是一个类(要写一个类的),当我们声明一个委托时,相当于声明了一个类,该类默认继承多播委托类,间接继承委托类。它大概的存储函数的原理是,通过一个委托类对象,来存储被调用函数所在的对象的引用(如果是成员函数),或类名(如果是静态函数),同时再记录该函数的函数名(之后又会通过函数名去找到函数的内存地址)。
补充:委托进行+=函数操作时,会调用委托类这个父类中的Combine方法,在底层帮助我们声明一个新的委托对象来记录函数的信息

c#事件的本质是什么
答:是对委托的封装,是一个特别的委托,系统在编译加了event修饰的委托后会进行一些特殊处理。比如,不允许在外边+=,-=等

posted @ 2024-03-03 22:10  波奇型蠢驴  阅读(16)  评论(0)    收藏  举报