【游戏开发岗面经总结1】(局部变量存放,new和melloc区别,进程线程,进程间的通讯,多进程多线程,TCP和UDP的使用时机)

局部变量存在哪?

局部变量保存在栈内存区
栈内存区的地址是连续的,由系统控制速度较快
堆内存区的地址时不连续的,它是把系统中空闲的内存连接起来的链表

栈是系统根据变量自动分配大小的
堆中分配内存是通过malloc函数或者是new来申请分配

用户使用malloc或者是new申请内存的时候,找到第一个满足大小的空间,即从链表中删除这个节点
之后就分配给用户使用,没有栈内存使用快,但是很灵活

new/delete和malloc/free的区别

1.首先是属性上的区别,new和delete是编译器支持的,malloc和free是头文件支持的
new/delete是c++中的保留字,malloc和free是c中的函数

2.参数的区别 malloc中的参数得是自己分配的内存的大小得是手动添加的
使用new关键字无需手动指定内存块的大小,编译器会自动根据类型进行计算

3.返回类型的区别 new的操作符执行成功之后,返回指针类型的对象且严格和对象匹配,无需进行类型转换,new是安全性较高的操作符
malloc执行成功之后返回的类型是void 我们必须通过强制转换来转换成目标类型

4。new 建立一个对象(分配内存,调用构造函数)
delete的调用析构函数,释放内存
malloc和free只负责分配和释放内存

5.对于重载的区别 c++对于new是允许重载的,而malloc是不允许的

6.new建立的是一个对象,malloc分配的是一块内存,new建立的对象可以用车苍蝇馆函数访问,不用直接访问地址
malloc出来的是一块内存区域,用指针访问,可以在里边移动指针

delete和free的区别

进程和线程是什么,对一个操作用多进程和多线程有什么区别和缺点

进程和线程是什么

进程是系统中正在运行的一个程序,程序一旦运行就是进程
进程可以看做是程序执行的一个实例,进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。
一个进程无法访问另一个进程的变量和数据结构,如果想要访问另一个进程的资源,必须使用进程之间的通信(管道,文件等)

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间,线程和进程的主要区别就是
同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法访问另一个进程的内存)
每个线程拥有自己的寄存器和栈,其他线程也可以读写这些栈内存

线程是进程的一个实体,是进程的一条执行路径。

进程和线程的区别

根本区别
进程是资源分配最小单位,线程是程序执行最小单位。
计算机在执行程序段过程中,会为程序创建相应的进程
进行资源分配的时候,是以进程为单位进行相应的分配
每个进程都有相应的线程,在执行程序的时候,实际上是执行相应的一系列线程

地址空间:
进程有自己独立的地址空间,每启动一个进程,系统会为其分配地址空间,建立数据表来维护代码段,堆栈段,数据段
线程没有自己独立的地址空间,统一进程的线程共享本进程的地址空间

资源拥有: 进程之间的资源都是独立的,同一进程内的线程共享本进程的资源

执行过程
每个独立的进程都有一个程序的入口,顺序执行序列
线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

线程是处理机调度的基本单位,进程不是,由程序执行的过程其实是执行具体的线程,那么处理机处理的 也是程序相应的线程
所以处理机调度的基本单位是线程

系统开销
进程执行开销大,线程执行开销小

对一个操作用多进程和多线程有什么区别和缺点

多进程和多线程编程都可以使用并行机制来提升系统的运行效率。二者的区别在于运行时所占的内存分布不同
多线程公用一套内存的代码块区间;多进程是各用一套独立的内存区间

多进程优点 稳定性好,假如一个子进程崩溃了不会影响主进程以及其余进程,基于这个特性多用于守护服务器的功能
多进程缺点 创建进程的代价非常大,操作系统给每个进程分配固定的资源,且操作系统对于进程的个数也是有限制的
如果进程数量过多,进程调度会出现问题,出现假死状态

多线程优点 效率高一些,适用于批处理任务等功能
多线程缺点 任何一个线程崩溃会导致整个进程崩溃,因为他们共享资源

TCP和UDP是什么,什么时候用TCP,什么时候用UDP,游戏的话用什么

TCP和UDP是TCP/IP协议中的两个传输层协议,他们使用IP路由功能吧数据包发送到目的地,从而为应用程序以及应用层协议提供网络服务

TCP
对于文件传输,远程终端这些应用来说,是不允许数据丢失的,因为TCP提供了超时和重传等可靠机制,因此采用TCP

UDP
因为UDP是不可靠传输,所以当包量比较小的时候使用UDP是比较合适的,这样可以避免丢失大量的重要数据
对于音视频来说,因为UDP是非连接的,所以占用资源比较少,而且对于音视频来说,丢掉一些数据包是可以接收的

如果网络比较好的话,可以考虑使用UDP,否则TCP就是首选(保证数据的可靠性)
局域网大多用UDP,但是广域网绝大部分是(可以说全部)Tcp
上边只是我浅薄的理解,如果有不对的地方,欢迎指正

进程间的通讯方式有哪些

1.管道: 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间才能使用,亲缘关系通常指父子关系
2.有名管道: 有名管道也是一种半双工的通信方式,但是允许无亲缘关系的两个进程之间相互通信
3.信号量 信号量是一个计数器,可以用来控制多个进程对共享资源的访问,常常作为进程间控制同步和互斥的工具
4.消息队列 消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列客服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限的缺点
5.信号 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
6.共享内存: 共享内存就是映射一段能被其他进程访问的内存,这段共享内存由一个进程创建,但是多个内存都可访问,共享内存最快的是IPC方式,他是针对其他进程运行效率低而专门设计的,和其他通信机制(信号量等)配合使用,来实现进程之间的同步和通信
7.套接字 套接口是一种进程间通信机制,与其他通信机制不同的地方时,它可用于不同的进程以及之间的进程通信

线程通信只有管道共享内存

希望我所写的对大家有些许帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值