![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔试题总结
一棵橙子树
C#/C++
展开
-
关于sizeof()空间计算和索引-1的记录
问题一:结果为4,4,1;如果去掉虚函数func2(),则结果为1,1,1说明两个问题,加了虚函数则有了虚函数表,则父类和子类都变为4个字节(一个指针大小),如果为空类,则占用一个字节。静态数据放在静态区,不参与sizeof的运算。如果将静态换为非静态,无论是public还是private,结果都为8,8,1问题二:[-1]表示指针向前移动一位,如果未定义则是野指针,否则会正常输出值结果返回ed计算过程为 str指针移动4位到hi,再回退一位到ed...原创 2020-09-18 20:27:00 · 269 阅读 · 0 评论 -
关于位运算的记录
正数的位运算就是转二进制后直接运算,包括与或非和左右移等。负数的位运算,要先转二进制:最高位为1,然后剩余7位按正数处理,然后取反,得到反码,然后加1,得到补码。利用补码进行二进制运算,如果得到结果最高位为0,则输出结果。如果最高位为1,则逆向运算,先减一,再取反,得到负数值。对于左移和右移的操作,不管该数为正或者负,都是增大或减小2^n倍(溢出位舍弃)...原创 2020-09-18 18:23:05 · 135 阅读 · 0 评论 -
SP专场问题整理(一)
1.C#中协程的原理是什么?线程和协程的区别是什么?协程的底层实现原理是什么?如果同时运行多个协程需要注意什么?进程是系统资源分配的最小单位,线程是任务调度的最小单位,可以理解协程是一种用户态的轻量级线程,它提供了由程序员来控制的何时开启并在何时暂停的机制。协程拥有自己的寄存器上下文和栈,协程调度切换时,会将当前的寄存器上下文和栈保存在另一个地方,在切换回来的恢复之前的寄存器上下文和栈,由于是直接操作栈,所以性能高效。线程的执行涉及到同步与锁的问题,然而协程本身不是多线程,它和update函数一原创 2020-07-09 22:07:31 · 763 阅读 · 0 评论 -
C++ 野指针、指针悬挂以及内存泄漏的概念
野指针:指针没有做初始化操作,从而不明确指针所指向的位置,成为野指针。指针悬挂:指针所指向的内存空间已经被删除,从而该指针所指向的空间就不确定了,容易导致错误或者崩溃。内存泄漏(Memory Leak):是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。...原创 2020-06-29 15:56:31 · 599 阅读 · 0 评论 -
C# 值类型和引用类型的性能比较
值类型都继承自System.ValueType,引用类型的继承链上没有System.ValueType,但是System.object是所有类的基类。C#的结构类型,比如int32等。结构类型不能继承,但是可以实现接口。为什么说结构不能继承,但是又继承于System.ValueType,而结构是值类型,其根基类是引用类型?这主要是因为微软对值类型进行了特殊的处理,CLR会自动给值类型分配栈上空间,引用类型分配堆内存。在介绍值类型和引用类型的性能之前,我们需要先知道堆和栈空间:对于一个32位操原创 2020-06-29 14:59:05 · 899 阅读 · 0 评论 -
C# 引用类型和值类型的堆栈分布
一、引用类型一定放在堆上吗?面试官提到这个问题的时候,我第一反应当然说不是,然后我就说引用类型可能持有值类型的对象,而该对象存放在栈上……然后我开始觉得不妥……面试官接着问,那么在方法体结束后,栈上的临时空间释放了,那么该引用类型所持有的对象去哪里了呢……这时候意识到可能回答错误了,但是我就着这个问题回答,如果引用类型持有了某个值类型对象,那么会将其装箱在引用类型的堆内存中,当栈上空间释放后引用类型的值类型对象还是存在只不过其值为空……(那么该引用类型所持有的值对象不是一样在堆上了吗)可能面试官就是原创 2020-06-29 12:38:00 · 273 阅读 · 0 评论 -
C#实现对象的深拷贝与浅拷贝(正确打开方式)
首先吐槽一下部分CSDNer,不要照抄,要有自己的思想,网上传的C#四种实现深拷贝的方法都属于比较偏的方法了,然而C#有内置的实现深拷贝和浅拷贝的方法,大家何必另辟蹊径,还全部都不加思索的就复制粘贴……1.实现默认的拷贝构造函数(复制构造函数)这一部分请看官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/how-to-write-a-copy-constructor原创 2020-06-28 17:59:00 · 1966 阅读 · 1 评论 -
记录3-C++拷贝构造函数的意义
拷贝构造函数的目的就是完成对一个对象的拷贝,一般在一下三种场景下会调用该对象的拷贝构造函数:1.函数返回类型是类的对象时2.函数的参数是类的对象,调用该函数时会调用该类的拷贝构造函数3.使用一个对象去初始化类的另一个对象时 F a = new F(1,2); F b = a; / F b(a) 注意必须要在类的初始化中使用,不是类的赋值拷贝构造函数的关键意义在与可以实现深拷贝,即实现申请新的内存空间并复制其值。默认拷贝构造函数实现的是浅拷贝,即完成对象的一一辅助但该对象还是指向堆中同一个对象原创 2020-06-28 17:25:18 · 1905 阅读 · 0 评论 -
记录2-C++将析构函数定义为虚函数的意义
虚函数是实现多态的基础,我们可以使用基类指针指向派生类对象,如果没有将基类定义为虚函数,则在释放该对象时,仅仅会调用基类的析构函数,而不会调用派生类的析构函数,导致析构不完全而产生内存泄漏。将基类析构函数定义为虚函数,并在派生类中重写了该析构函数,当我们使用基类指针指向派生类对象,释放该内存时,则会先调用派生类析构函数,再调用基类的析构函数,从而完成对该对象内存的完全释放。...原创 2020-06-28 16:51:04 · 219 阅读 · 0 评论 -
记录1-C++虚函数的实现原理
虚函数是实现多态的基础,在定义基类虚函数时,会为该基类分配一个虚函数表,虚函数表记录了虚函数的地址。子类继承基类时,如果重写了虚函数,则会覆盖这个地址,形成新的虚函数表,否则就继承基类的虚函数地址。当实例化子类对象时,虚函数指针则指向该对象的虚函数表中该虚函数的地址,并执行相应的方法。...原创 2020-06-28 16:44:01 · 140 阅读 · 1 评论