抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

无状态方法 线程安全 同事经常跟我强调线程安全的重要性,比如下面这段代码,id是一个静态成员变量,被所有Student类的对象共享,在多线程环境下可能会造成不确定行为 class Student{private: static int id = 0;public: int getId() { return id; }}int Student::i...

内存分配 最近看了一些关于内存分配的分享,发现操作系统相关的知识都忘光了,于是打算借助Linux内核的内存分配机制,简单复习一下内存分配相关的理论知识 程序运行时不断进行内存的申请与释放,高效的分配方式不仅能提高内存的利用率,还能提高性能。 Linux内存分配原理 地址 程序需要装入内存才能运行,程序开始的位置相较于内存0地址会有一段偏移,这个偏移被称为物理地址。 在程序内部,以程序开头...

C++函数调用 C++支持两种函数调用方式,__stdcall和__cdecl,两者对栈帧(stack frame)的处理方式不同,__stdcall是由被调用函数来清理栈帧,__cdecl是由调用函数来清理栈帧。一旦混用,容易引发错误 两者混用可能会导致栈帧没有被释放或者被连续释放两次 stack frame 栈帧用于维护函数调用的上下文信息,在函数调用时,会在栈上分配一块内存,用于存...

文明6like 4X游戏 文明6是一个经典的历史类4x游戏 explore(探索) expand(扩张) exploit(开发) exterminate(消灭) 文明6的体验 游戏体验 最近玩了几百小时的文明六,感觉意犹未尽,却又索然无味,想抽掉一些内容,自己做一个简易版的文明6,个人希望加强塔防、改良、贸易等元素,减少兵种操作、城市铺设。 我玩文明6,最让人兴奋的就是地块高额的产出(尤...

Git 使用记录 记录一下平时使用Git的记录 为什么使用Git 程序开发的第一步,就是做版本管理。频繁提交,可以便于环境恢复和Bug查找。分支开发,也能便于合作与多设备协同。配置Review规范,你还可以知道你的合作者在干什么,有效避免了因为开发者习惯能力差异导致的项目丑陋。配合CI的编译预检查,还能提高代码的稳健性。总之版本管理十分重要。 版本管理工具有很多,游戏开发由于拥有大量会频...

Unity ECS 入门 曾经待的项目使用了Unity ECS 0.5,那时候功能很不完善,几乎所有功能都从头写了一遍。现在Unity ECS 1.0发布了,有点失望。看了一圈感觉系统复杂性提高了很多,而且不能保证系统的稳定性(尤其是有错的代码编译),非常不适合独立游戏制作 数据驱动 ECS的本质就是数据驱动的编程,随着守望先锋的爆火进入大家视野,结果现在守望2都凉了,Unity才把ECS...

Unity小球移动 摘自Catlike的Movement Tutorial 小球移动 创建小球 使用Input System包,在Package Manager中Unity包搜索即可 创建Input Action资产 创建小球,包含拖尾渲染器、Player Input组件、脚本SphereMovement.cs 移动脚本 public class SphereMovement :...

Blender使用笔记 建模 移动模型 快捷键G 网格合并 选中模型,按快捷键ctrl+J 网格按材质切分 选中模型 进入Edit Mode Mesh——Separate——By Material Modify 布尔建模 Object Mode——选中物体——Add Modifier——Boolean——Apply 有Difference、Union等选择 曲面细分 如果要制作圆弧形...

3dmax使用笔记 3dmax是一个被广泛使用的DCC工具,我之前对这个软件不是很熟悉,于是记录一些平时遇到的常用操作 材质编辑 选中模型,按键盘m,打开材质界面。点击吸管后再点击模型,即可得到该网格所使用的材质列表 点击Modes——Slate Material Editor,即可打开材质连连看 网格塌缩 我们预览模型动画时,想要导出某一帧的网格,而且希望这个网格位置本身被修改,而非运...

C++模版 《C++ Templates: The Complete Guide》笔记 为什么使用模版 为了实现泛型 如果不使用泛型,对于一些通用的函数或容器,比如print、vector,我们可能需要逐个实现他们的函数,尽管这些函数的功能十分类似(可能相同),低效复杂而且难以维护 在C++标准库中使用了大量模版 模板的缺点 难以阅读、调试 容易触发编译报错(比如将<<运算...