自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

kelvin_feng的专栏

less is more

  • 博客(74)
  • 资源 (2)
  • 收藏
  • 关注

原创 大话C++之:对象内存模型

详解C++对象内存模型

2024-03-04 23:07:22 852

原创 大话C++之:左右值引用和std::move

讲述左右值,左右值引用,以及std::move的原理和应用

2024-02-28 20:25:01 898

原创 recastnaviation: 点到线段的距离

最近在阅读RecastNavigation的源码过程中,发现很多基础几何计算函数,虽然接口封装得很好,但是内在的实现还是需要琢磨研究,它是三维几何计算的基础。以下内容为学习了解的过程,仅作分享记录,如有错误,欢迎指正。准备知识:点积(Dot Product, 别名为:点乘,内积)定义:点积具有两种方式表达,分别为代数方式和几何方式。这两种方式在计算点到线段距离均会使用到,故先作了解。代数方式:几何定义:在欧几里得空间中,点积可以直观地定义为点积的几何意义:第一个向量在..

2021-12-23 15:32:09 803

原创 C基础:堆排序

堆排序使用的是有序二叉树数据结构存储排序的,所有的非叶子节点均不大于或不小于子节点。分析时间复杂度为:O(nlogn),不稳定。空间复杂度为:O(1),因为原地排序,没有使用额外空间。代码实现#include <stdio.h>#include <stdlib.h>void swap(int arr[], int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}void.

2020-08-28 21:00:46 194

原创 大话C++之:内存对齐

在使用sizeof()计算结构体和class大小的时候,往往很多时候计算出来并不是我们想要的结果。最近在使用的时候就特别想了解它内在的原理,搞懂它的本质。看一下下面这个例子:struct Struct{ char a; int i;};问题是:这个结构体大小是多少?很多人回答可能是5个字节。分析结构体的组成是:char占1个字,int占4个字节。1+4=5,没错吧?其实这个答案应该是:不确定。因为它给的条件不能够得出一个确定的答案。打开VS 2017,64位程序执行一下,得出的结果是8。

2020-08-05 20:59:29 225

原创 深入浅出:原码,反码,补码及减法

众所周知(我不说大家也知道),计算机内部是以二进制存储数据的,对于不同的类似可能存储的格式含义不一样。例如有符号整数,最高位是符号位,其余代表数值;那么它在计算机里要怎么运算表达呢,我们下面来一步步说一下举个例子,1+1怎么表达呢?1的二进制表达为(为了方便用1个字节表示):00000001那么1+1即表达为:00000001 + 00000001 = 00000010 = 2是吧,这样子是对的,so easy。再接着看下面,2-1怎么表达呢?2的二进制为:00000010-1的二进制

2020-08-03 16:00:46 1510

原创 深入浅出:操作系统之虚拟内存

1.虚拟内存1.内存存在的问题1.内存不足2.内存碎片化3.程序间互相修改内存2.什么是虚拟内存3.如何实现虚拟内存4.虚拟内存与缓存2.内存的3个问题:如果所有程序可以直接访问相同的内存空间1.假如内存不足会怎么样?(对于一台32位系统来说,可以使用的内存有:2^32 bytes = 4GB)1.内存不足,超出内存空间会导致崩溃(crash)(例如32位系统,只有1GB RAM)2.内存碎片化:如果连续分配内存,程序可能找不到合适的空间(run out of space),即使有空间

2020-07-21 20:12:30 3901

原创 图说红黑树算法

1. 二叉树对于一颗普通的二叉树来说,查找时候还是蛮有效率的,只要不是极端的情况。例如下面这种满二叉树来说,时间复杂度为O(logn)。但是呢,有些时候并不是那么如你所愿,例如,从10到1一直插入到一颗二叉树时,就会出现以下这种情况,查找的时候复杂度实在难受,O(n)然而对于这种情况的二叉树,每次插入的时候都只管找位置就坐,可能导致树的左右不平衡发展了,这,就懒的结果了。那么,为了让一颗二叉树保持很好的查询效率,于是乎就产生了:会自我管理树的平衡性的二叉树,称为:平衡二叉树,亦称为:红黑树(Red

2020-05-31 14:49:57 334

原创 lua GC 回收效率研究

最近项目里打算做一个缓存全服玩家的基础信息的功能,由于数据量表面看上去有点大,需要对数据量进行在内存中大小进行评估,同时也要对GC进行评测,才能确定是否批准把该方案落地。缓存方案:服务器启动时把全服玩家基础数据读取出来进行缓存,每个玩家测试字段数量为:6个int, 2个字符串。按这个数据模板测试,得出的大概内存占用数量统计为:可以从上面图看出,对于30万的玩家来说,内存数据大概108M,即使把字段翻一翻,也就216M,对于服务器的开发换来的是不需要异步读取离线玩家数据,基础数据统一管理的结果,这个内存

2020-05-29 14:45:29 747

原创 Lua 源码分析之垃圾回收GC

Lua GC算法1.概览垃圾回收算法里,有两大类别:一是引用计数法,二是标记清除法(Mark & Sweep)。Lua 采用的是第二种,标记清除法。在不同的版本中,Lua的GC有不一样的做法。5.0版本的双色标记算法在早期的5.0版本使用的是双色标记清除法(Two-Color Mark and Sweep),它的大概原理是:每一个对象的状态非黑即白,要么被引用,要么没有被引用,系...

2020-02-11 15:24:05 1137

原创 Unicode 与 UTF-8 的本质与转换

对于大多数人来说,ASCII码,Unicode,UTF-8等等,大家都耳熟了,但可能只是大概听过但又没有仔细深入了解。很多时候一旦遇到乱码和编码之类问题的时候就会蒙,无从下手。我最近也着手在写些网络相关的代码,想更清楚了解内部的到底是什么,故上网学习了下并作记录1.ASCII码计算机发展初期,美国需要用通过计算机来表达26个基本拉丁字母、阿拉伯数字和英式标点符号,通过制定编码来表达它们。那既然...

2020-01-22 10:23:51 2892

原创 lua string.concat和..性能对比

print("-------------------------------------test1-------------------------------------")--[[测试用例:测试简单字符拼接--]]local a = "hello"local b = "lua"local c = "world"local startTime = os.clock()loca...

2020-01-19 15:25:43 2300 2

原创 Unity Navmesh Surface 烘焙物品顶部网格问题

在使用Navmesh Surface烘焙导航网格的时候,很多时候有些物品上面是不能走的,即使烘焙了导航网格,如下图:这些导航对于程序来说可能是个问题,因为它本身不可到达,在寻找导航点的时候,它会增加程序寻点的成本,一般我们需要手动配置剔除。剔除的方法:选中顶部不需要导航风格的物品 添加NavmeshModifier 勾选:Override Area Area Type选择:N...

2019-11-12 22:20:23 1138

原创 Unity Timeline 自定义 Signal的使用

Timeline是一个创建过场动画,整合不同类型的资源序列的一个工具。目前在网上的搜索到的资料比较少,而且版本各异,需要结合官方文档和解说视频才能比较好地学习一遍,本文主要记录一下Signal的自定义脚本使用。 Timeline本身就是一个资源整合的工具,可以给不同的对象建立不同类型的轨道(类似视频音轨),例如有:对象激活与隐藏轨道,动画轨道,声音轨道等;每个轨道可以...

2019-10-14 11:49:10 4036 1

原创 Unity 动画结束后抖动的问题

在Unity中使用Animator的时候,很多时候参数选择不对就会出现各种奇怪的问题,最近遇到一个从攻击动作回复到原地站立动作的时候,角色出现了抖动。这里面的抖动原因可能有多种,要确定是哪一种引起的。在结束的时候,检查动画是否出现重复播放的问题。我的检查方法是把播放速度调慢,看状态机里面的抖动的节点是否在结束后又播放了一次,如果就是重复播放导致的。解决方案:看当前节目的进入条件是...

2019-09-26 20:48:43 1505

原创 CentOS 7 安装 Jenkins

安装相关库 安装Java:yum install java 检查,如果显示Java版本号,说明已经正确安装:java -version 安装Jenkins wget -O /etc/yum.repos.d/jenkins.repohttp://jenkins-ci.org/redhat/jenkins.repo rpm –importhttp://pkg.jenkins...

2019-08-21 11:20:20 151

原创 CentOS 7 安装 Mysql,使用Mysql connect C连接数据库

CentOS 7 安装mysql server1.由于CentOS 7 默认安装的是MariaDB,并不是安装Mysql,需要修改安装源 rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm2.安装mysql-server 1.yum install mysql-server ...

2019-08-18 17:19:33 1048

原创 CentOS 7 安装 Redis,使用hiredis操作数据库

安装redis server 下载redis: wgethttp://download.redis.io/releases/redis-3.0.0.tar.gz tar zxvf redis-3.0.0.tar.gz 编译时依赖的库 编译redis时 提示make cc Command not found yum install gcc yum install tcl ...

2019-08-18 17:16:37 722

原创 CentOS 7 安装 Lua

下载lua源码:wget http://www.lua.org/ftp/lua-5.1.5.tar.gz 解压:tar xvzf lua-5.1.5.tar.gz 切换到lua目录:cdlua-5.1.5/ 安装相关的三方库:yum install -y readline-devel ncurses-devel 安装测试:make linux test 安装:make install...

2019-08-17 14:59:47 186

原创 CentOS 7 安装/升级 GCC 4.9

下载gcc安装文件:wget https://ftp.gnu.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz 安装C和C++的静态库:yum install -y glibc-static libstdc++-static 安装旧版本的gcc、c++编译器:yum install gcc gcc-c++ 解压安装包:tar -zxvf gcc-4.9.0.t...

2019-08-15 16:55:14 5245

原创 虚拟机VirtualBox下的CentOS 7开启 ssh 连接

安装openssh-server 检查是否有安装:yum list installed | grep openssh-server,如果有显示内容,则已安装,否则进行第2步 安装openssh-server:yum install openssh-server 开启ssh 22监听端口 打开sshd服务配置文件:vi /etc/ssh/sshd_config 找到:#Port...

2019-08-15 13:46:44 748

原创 VS 环境使用MySQL Connector C 6.1 连接数据库

下载MySQL Connector/C,根据你的系统版本选择下载ZIP ARCHIVE,下载链接 配置附加目录和库目录 项目-->属性-->配置属性-->VC++目录-包含目录 中加入mysql Connect C文件的include目录(根据自己的目录设置,此处测试使用了绝对路径) C:\Users\kelvin\Downloads\mysql-connector-c-...

2019-07-19 15:28:37 1840

原创 ExcelToLua使用配置安装

下载安装python 下载链接 选择2.7的版本安装 配置环境变量 下载安装setuptools 下载链接 解压 编译:python setup.py build 安装:python setup.py install 下载安装xlrd 下载链接 解压 安装:python setup.py instal ...

2019-07-17 10:41:10 175

原创 CentOS 安装Git 服务器

安装git yum install -y git 创建git用户 新建用户:adduser git 设置密码:passwd git 初始化git仓库,路径:/opt/repos/testgit.git 创建路径:mkdir/opt/repos 创建路径:mkdir/opt/repos/testgit.git 切换到路径:cd/opt/repos/ 初始化仓库...

2019-06-19 22:27:44 189

原创 Lua 源码分析之闭包Closure

闭包是Lua语言编程一个重要而又常用的概念。它主要作用是在函数离开作用域后还可以访问外部的临时变量,这些变量称为upvalue。 闭包分为两种,分别CClosure和LClosure。它们都被封装到一个Closure结构体里,CClosure和LClosure都有一个ClosureHeader的结构体。结构体ClosureHeader的字段作用: 1...

2019-04-11 19:29:44 949

原创 Lua 源码分析之Table - Rehash过程

Lua的Table的内存结构主要分array part和hash part,它们俩的内存大小是动态变化的,如果空间不够就需要分配更多的空间,如果空间利用率太少就需要缩减内存,这个过程叫做rehash。现在来看看rehash是怎么样的过程。rehash内部,主要是做了以下几件事: a.计算array part的key的数量 b.计算hash part的key的数量 c.计...

2019-04-01 15:44:24 2300

原创 Lua 源码分析之Table - Hash部分内部原理

Lua设计里面,Table是一个特别关键的部分。它可以表示很多的数据结构,可以是Array,可以是Map,可以根据自己的需要实现栈,队列等等,使用起来方便。源码里面的设计显得特别重要了,它是被很频繁地使用,提高性能是设计者重中之中。首先先看一下Lua的总体设计:它分为两部分,分别是数组Array和Hash部分。数组部分主要是存储下标从1开始的连续不为空的节点内容,如果是中间断开部分会存到has...

2019-03-15 20:05:01 7113 8

原创 C++ 使用异或对字符串进行简单加密

在很多场C++需要对字符串数据进行加密,可以增加一定的安全系数,例如在网络传输的时候,防止抓包可以看到明文内容。为此做了一个使用异或做了简单的加密方法,记录一下,代码如下:#include &lt;string&gt;#include &lt;iostream&gt;using namespace std;int key[] = { 1,2,3,4,5,6,7};void ...

2018-11-29 17:51:31 11119 1

原创 Lua 源码分析之Table

一、创建一个table(lapi.c, line:666)LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { Table *t; lua_lock(L); luaC_checkGC(L); t = luaH_new(L); sethvalue(L, L->top, t); api...

2018-11-07 10:34:36 732

原创 Lua 源码分析之TValue

Lua数据结构设计确定了这个整体的设计理念,Lua所有的数据,一共有9种,都是通过TValue这个结构来存储。Lua的9种基础的数据类型有(lua.h:73):/*** basic types*/#define LUA_TNONE        (-1)#define LUA_TNIL        0#define LUA_TBOOLEAN        1#define L...

2018-09-06 14:59:25 1728

原创 Lua userdata和lightuserdata

userdata和lightuserdata可以让C返回一个句柄给Lua,而Lua可以将句柄再通过在C中注册的方法传回Cuserdata:userdata通过Lua的API(lua_newuserdata())分配内存,就像C里的malloc()函数分配内存,但不需要调用free()去释放内存,该内存是由LUA的GC机制进行回收。lightuserdata:lightuserdat...

2018-08-30 10:14:56 10029

原创 Git 操作之解决冲突

Git在pull的时候是非常容易冲突的,不仅仅是在于修改文件冲突,还有一种冲突是由于只commit不push的情况下进行pull具体情况如下:git 冲突问题1.a修改了README文件,commit(但不push)2.b也修改了README文件,同时增加了hello.c文件,commit &amp; push了此时a更新,就会出现冲突,这不仅仅是冲突,而且提交者不正确处理,会出现提...

2018-08-16 13:39:40 187

原创 Git 操作之回滚

用习惯了SVN,转而使用Git,有很思维习惯是被固定,例如回滚一样,操作步骤会比SVN多。回滚有两大类,第一类是不改写历史,第二类是改写历史。第一类,方法1(推荐):git checkout commit_id # 回到历史(回滚内容,HEAD指向commit_id,如果有修改可以先用git stash)git reset --mixed master # 把历史带到master(把...

2018-08-09 09:40:42 212

原创 Lua 源码分析之String

因为每一版本的源码可能会有差别,现在基于lua 5.2.1来分析,保持一致性。从虚拟机的大体来看,字符串通过一个结构体存放在global_State里,这个结构stringtable(lstate.h)是:GCObject(lstate.h)的结构是:stringtable结构体的字段含义是:GCObject **hash:GCObject指针的指针,通过Hash值可以指...

2018-06-15 11:48:36 1360

原创 C++ 指针和指针的指针深入理解

每个使用C or C++的同学,应该都会经历指针模糊的问题,取址符又是什么?指针和取址很容易混淆。现在来看一小段代码,以我的个人角度来细说理清一下。#include &lt;iostream&gt;int main(){ int i = 1; int j = 2; int* ip = &amp;i; int* jp = &amp;j; int** ipp = &amp;ip; ...

2018-06-13 12:32:44 1026 2

原创 浮点数的二进制表示(IEEE 754标准)

浮点数是我们在程序里常用的数据类型,它在内存中到底是怎么样的形式存在,是我了解之前是觉得好神奇,以此记录,作为学习笔记。现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位。根据这个标准,我们来尝试把一...

2017-04-19 12:55:59 62608 21

原创 xcode 修改默认工作目录

修改Xcode默认工作目录步骤:1. 选择: products->scheme > edit scheme2.

2017-02-22 13:03:17 2458

原创 C++ 练习:用指针实现栈

使用C++的指针实现一个简单版的栈stack.h #ifndef stack_hpp#define stack_hpp#include &lt;stdio.h&gt;class Stack{public: Stack(); ~Stack(); bool Push(int value); int Pop(); priva...

2016-12-19 20:47:08 2134

原创 xcode: linker command failed with exit code 1 (use -v to see invocation)

xcode里,出现linker失败,duplicate symbol _main的原因,我遇到的是两种情况:1.编译的文件里出现在了两个main()函数2.同一个main.cpp,即同一个target被两个或两个以上membership选中

2016-11-14 16:52:58 1038

原创 xcode 同一个project里 复制 多个target

在开发过程中,经常需要用到多个target去启动程序,此时需要新建多个target。新建target有两种情况:1.完全新建一个1.菜单栏 -> File -> New -> Target2.根据步骤去新建一个全新的target即可2.基于现有的target复制一个环境变量相同的新target1.选中project,就会显示以下界面         2.在t

2016-11-14 11:35:37 1913

excel2lua工具

excel to lua工具,安装相关工具过程:https://mp.csdn.net/postedit/86668828

2019-01-27

C语言---选择排序算法源代码

用C写的选择排序算法,最基础的,如果有什么建议直接留言,后续会贴上其它算法

2011-11-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除