- 博客(40)
- 收藏
- 关注
原创 【lua学习】8.协程
1 数据结构和宏1.1 协程的状态码1.2 协程的执行状态码1.3 lua_State 协程结构体2 C API2.1 lua_newthread 新建一个协程,压栈,返回这个新协程2.2 luaE_freethread 释放一个协程L12.3 lua_status 获取协程的错误码2.4 lua_resume 唤醒一个协程,nargs为参数个数,返回值为协程状态码2.5 lua_yield 挂起一个协程3 Lua API3.1 协程模块的注册3.1.1 luaL_register(L, LUA_COLI.
2022-04-05 22:28:07
1589
原创 【lua学习】6.函数,闭包,错误处理
1 数据结构1.1 Closure 闭包1.2 Proto 函数原型1.3 UpVal 外部局部变量(upvalue)1.4 LocVar 局部变量信息1.5 SParser 语法分析所需要的结构1.6 Zio 读写流对象1.7 Mbuffer 缓冲对象1.8 lua_Debug 调试信息1.9 CallInfo 函数调用信息1.10 lua_longjmp 跳转信息1.11 CallS 调用函数结构(f_call的参数)1.12 CCallS 调用C函数结构 (f_Ccall的参数)2 闭包相关API2.
2022-04-04 16:10:31
2039
原创 【lua学习】5.栈和lua_State
1 背景2 栈(寄存器数组),虚拟机,全局状态机2.1 栈定义在lua_State结构体中2.2 global_State 全局状态机2.3 lua_newstate 主虚拟机和全局状态机的创建2.4 lua_close 关闭虚拟机2.5 lua_newthread 新建一个协程,压栈,返回这个新协程2.6 lua_atpanic 设置兜底异常处理函数(用于处理未捕获异常的函数),返回旧的兜底异常处理函数3 栈上的地址3.1 假索引3.2 根据数字索引获取栈上的地址4 基本的栈操作API4.1 lua_g.
2022-03-26 19:54:31
3929
原创 【lua学习】7.环境
0 最重要的两个数据结构0.1 lua_State(Lua虚拟机/Lua协程)0.1.1 lua_State的栈0.1.2 lua_State的函数调用信息0.2 global_State(Lua全局状态)1 环境相关的变量1.1 Global表1.1.1 Global表在lua_State结构中1.1.2 Global表在 f_luaopen 时被初始化1.2 env表1.2.1 env表在Closure结构中1.2.2 查找一个全局变量<=>在当前函数的env表中寻找1.2.3 lua函数.
2022-03-19 18:00:14
676
原创 【lua学习】4.表
1 概述2 数据结构2.1.表Table2.2 键TKey2.3 节点(键值对)Node3 操作算法3.1 查找3.1.1 通用查找luaH_get3.1.2 根据字符串查找 luaH_getstr3.1.3 根据整数查找 luaH_getnum3.2 新增元素/修改元素/删除元素 luaH_set系列3.2.1 根据key获取或创建一个value: luaH_set3.2.2 根据数字获取或创建一个value: luaH_setnum3.2.3 根据数字获取或创建一个value: luaH_set.
2022-03-12 16:04:48
1385
原创 【lua学习】3.字符串
【lua学习】3.字符串Lua字符串的概况字符串实现字符串结构TString全局字符串表stringtable新建字符串luaS_newlstr (先查表,再决定创建与否)新建字符串 newlstr重新设置全局字符串的大小 luaS_resize全局字符串表的缩容保留字是如何不被回收的Lua字符串的概况Lua虚拟机中存在一个散列桶结构的全局字符串表来存放所有字符串关于比较字符串:先比较hash,再比较长度,再逐字符比较。节省时间同一个字符串在Lua虚拟机中仅有一个副本。节省空间一旦创建则无法变更
2022-03-06 16:49:17
939
原创 【lua学习】2.数据类型
【lua学习】2.数据类型Lua中的数据类型关于TValue自顶向下分析TValue表示所有的Lua数据结构并带一个类型字段Value表示所有的Lua数据结构GCObject表示所有需要进行垃圾回收的数据结构GCheader表示需要GC的数据结构最开始的部分Lua中的数据类型宏名 (见lua.h)宏值类型对应数据结构LUA_TNONE-1无类型无LUA_TNIL0空类型无LUA_TBOOLEAN1布尔类型无LUA_TLIGHTUSERDATA
2022-03-06 11:41:31
548
原创 【lua学习】1.源码组织
虚拟机核心相关文件列表内嵌库相关文件解释器,字节码编译器相关的文件做cocos2d-x lua已经有一段时间了,想更深入了解lua。我会出一系列地自身学习过程中地解读。我会带大家沿着源码来逐步解读lua,我喜欢按照深度优先遍历的顺序来解读源码,对于Lua源码中命名不好或者晦涩难懂的地方,我都会在写的时候加以适当地修改,若有错误或者依然不清晰,欢迎评论区指正。很多思路和解释,我都会在代码编辑区写上注释,所以务必不要忽略。虚拟机核心相关文件列表文件名作用对外接口前缀lapi.c.
2022-03-06 10:51:40
331
原创 如何判断exe文件是debug还是release编译生成的
如何判断exe和dll文件是debug还是release编译生成的结论: 用IDA工具打开exe,然后看Imports里面的依赖库是否有带d或D结尾的,如果有就说明是Debug的实验:(实验环境 vs2017, IDA工具)(0)准备IDA工具(软件长这样)(1)用hello world 编译Debug和Release各一份(2)用IDA软件打开Debug那份,发现 MSVCP140D 和 VCRUNTIME140D 都是带 D结尾的,说明是Debug的(3)用IDA软件打开Releas
2022-02-08 14:38:51
1610
原创 visual studio源文件的编译顺序是依据什么?
问题:visual studio源文件的编译顺序是依据什么?结论:依据 .vcxproj 文件里 指定了ClCompile的ItemGroup ,如下图所示,就是这么简单粗暴。
2021-10-03 16:36:58
1330
原创 论游戏项目中的左与右
标题《论游戏项目中的左与右》何为左与右?左,左倾,即***激进主义,冒险主义,盲动主义***。右,右倾,消极主义,保守主义,投降主义。标题(一)先说说关于左的例子。左例之一:激进主义遇到一个新技术,未经过实践就在实际项目中使用,就是左倾激进主义。记得在前年九月份的时候,我看到Cocos论坛有个很方便的uikiller框架,我直接用在项目中,王哥直接将我的“左”的错误扼杀在萌芽中,在此“事件”(因为是在开发过程中的讨论,好在并未真实线上这么做,所以不是事件)中我积累了宝贵的经验教训。所以左倾激进主义要
2021-07-11 11:10:04
211
原创 CocosStudio的节点如何使用自定义shader
CocosStudio的节点如何使用自定义shader问题:我想对CocosStudio 的 某个UI 里的 某个图片(如下图所示的Image类型)使用自定义shader。但是,我把 对传统cc.Sprite应用自定义shader的方式 应用于它时,并不生效!因此我展开探索。结论:其实CocosStudio里面的Image类型就是cocos的ImageView类,ImageView的draw方法还是来自于祖先类Node的draw方法,因此对ImageView处理肯定无法正常应用自定义shader
2020-10-16 13:12:11
374
原创 Lua协程Coroutine是什么
Lua协程Coroutine是什么协程和线程不同:同一时刻,一个多线程程序可以用多个线程同时执行;而协程只能有一个在执行多线程是抢占式的;而协程是非抢占式的,只有协程显示被挂起,才会被挂起协程和线程的相同点:拥有独立的栈拥有独立的局部变量拥有独立的指针共享全局变量API示例:coroutine.create(func) 通过函数创建一个协程返回的是一个协程类型...
2020-04-15 23:25:14
251
原创 C++是如何实现多态的
C++是如何实现多态的结论:C++通过虚函数来实现多态的,根本原因是派生类和基类的虚函数表的不同。构成多态的必要条件有如下3点:存在继承关系基类存在虚函数,且派生类有同原型的函数遮蔽它存在基类类型的指针指向派生类对象,且该指针调用了存在覆盖关系的虚函数如下图,就是一个简单的多态的例子:(实验环境:vs2019)大猪眉头一皱,觉得事情并不简单。针对上述实验结果,有个疑点:基...
2020-04-11 20:06:53
2333
1
原创 js箭头函数和普通函数区别
js箭头函数和普通函数区别实验环境:nodejs v12.16.1箭头函数不能作为构造函数,而普通函数可以 箭头函数没有原型,而普通函数有。箭头函数return可以省略语句块。箭头函数不绑定arguments(注意:浏览器环境下获取箭头函数的arguments会报错),而普通函数argument绑定了参数列表对象this指向问题箭头函数的this指向上层函数作用域的thi...
2020-04-10 16:23:54
1908
原创 js实现数组降维算法[不准用Array.prototype.flat的api]
js实现数组降维算法[不准用Array.prototype.flat的api]// target要降维的元素,n降维阶数,newArr存储结果的新数组function f(target, n = 1, newArr = []) { if (n < 0) { newArr.push(target); return; } if (!Ar...
2020-04-07 23:09:10
206
原创 js实现阶乘算法的三种方法
js实现阶乘算法的三种方法// 非递归写法function f(n) { if (0 === n) { return 1; } let res = 1; for (let i = 1; i <= n; ++i) { res *= i; } return res;}// 递归写法function g(n...
2020-04-07 22:55:01
3913
3
原创 CocosCreator1.x实现水流动的效果
CocosCreator1.x实现水流动的效果Cocos Creator版本:1.10.2运行结果:(H5和原生都支持)场景:脚本:HelloWorld.js:let shader = require(`shader`);cc.Class({ extends: cc.Component, properties: { water: cc.Node,...
2020-04-07 01:36:05
3338
5
原创 Python3实现快速排序 通俗易懂
Python3实现快速排序快速排序 是一种交换排序,属于分治算法。思路:对于要排序的元素集合,指定集合的第一个元素为基准点,通过一系列的扫描和交换(见下面的代码),让基准点左边的元素比基准点小,让基准点右边的元素比基准点大,这样分成了以基准点为界的左右两个子集合,对于每个子集合递归地重复上述步骤,直到每个最小集合只有一个元素时,就说明每个最小子问题解决完成,从而总问题解决完成。代码:# ...
2020-04-06 22:42:47
339
原创 Python3解题:二叉树路径总和问题
Python3解题:二叉树路径总和问题原题 https://leetcode-cn.com/problems/path-sum-ii/给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ ...
2020-04-02 00:25:51
338
原创 Python3求解旋转矩阵问题
Python3求解旋转矩阵问题原题 https://leetcode-cn.com/problems/spiral-matrix/给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]...
2020-04-01 23:40:07
848
原创 Python3 解题:字符串压缩
Python3 解题:字符串压缩原题 https://leetcode-cn.com/problems/compress-string-lcci/题目:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1...
2020-04-01 00:15:34
1010
原创 Python3求解找到小镇的法官问题
Python3求解找到小镇的法官问题原题 https://leetcode-cn.com/problems/find-the-town-judge/题目:在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足属性 1 和属性 2 。...
2020-03-31 23:52:55
517
原创 C++的一个指针占内存几个字节?
C++的一个指针占内存几个字节?结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系)在64位编译模式下,指针的占用内存大小是8字节在32位编译模式下,指针占用内存大小是4字节实验:64位编译模式下32位编译模式下分析:细心的同学可能会发现,为何 int* 和 stu* 类型的指针的大小一样呢?因为指针的本身的值就是内存地址,它的占用字节数...
2020-03-30 22:11:21
19905
2
原创 Python3实现红黑树[上篇]
Python3实现红黑树[上篇]由于时间有限,这次只写了红黑树添加节点,关于节点的删除放在下一讲。关于红黑树的介绍,来由,性质和定义,可以看这篇文章,本篇就不再赘述了:红黑树,超强动静图详解,简单易懂关于红黑树,其实比较容易摸不着头脑的是“左旋”和“右旋”。既然是旋转,那么肯定有支点和旋点,也就是以支点为轴,旋点绕支点 顺时针 或 逆时针旋转。那么,“左旋” 和 “右旋” 到底哪个是顺时...
2020-03-30 02:34:48
741
2
原创 Python3判断是否为回文数
Python3判断是否为回文数原题 https://leetcode-cn.com/problems/palindrome-number/题目:不允许用str的方法!判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。...
2020-03-28 23:20:30
800
原创 Python3实现队列
Python3实现队列class MyQueue: def __init__(self): self.__arr = [] def push(self, x: int) -> None: self.__arr.append(x) def pop(self) -> int: return self...
2020-03-28 23:03:35
364
原创 Python3不用str自带lower转换位小写字母
Python3不用str自带lower转换位小写字母原题 https://leetcode-cn.com/problems/to-lower-case/题目:不准用字符串自带的lower() API!实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 1:输入: "Hello"输出: "hello"...
2020-03-28 22:56:10
590
原创 Python3只出现一次数字
Python3只出现一次数字原题 https://leetcode-cn.com/problems/single-number/题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2...
2020-03-28 22:22:47
236
原创 Python3最长连续递增序列问题
Python3最长连续递增序列问题原题 https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/题目:给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] ...
2020-03-28 21:27:15
1112
原创 Python3有效括号问题
Python3有效括号问题原题 https://leetcode-cn.com/problems/valid-parentheses/给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: tru...
2020-03-28 20:28:44
1149
原创 Python3实现打家劫舍问题
Python3实现打家劫舍问题原题 https://leetcode-cn.com/problems/house-robber/你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷...
2020-03-28 18:33:35
415
原创 Python3实现最小栈
Python3实现最小栈原题 https://leetcode-cn.com/problems/min-stack/设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack...
2020-03-28 17:52:49
250
原创 Python3求最后一个单词长度
Python3求最后一个单词长度原题:https://leetcode-cn.com/problems/length-of-last-word/给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串...
2020-03-28 17:34:20
304
原创 Python3反转字符串
Python3反转字符串原题 https://leetcode-cn.com/problems/reverse-string-ii/题目:给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s...
2020-03-28 17:15:00
208
原创 Python3 三步爬楼梯问题
Python3 三步爬楼梯问题原题地址 https://leetcode-cn.com/problems/three-steps-problem-lcci/题目:三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1: 输入:n = 3 输出:4 说明: 有...
2020-03-28 15:57:05
944
原创 Python3 反转一个单链表
Python3 反转一个单链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# ...
2020-03-28 15:30:39
368
原创 Python3实现32位整数翻转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−(231), (231) − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。代码如下:class S...
2020-03-28 14:50:18
1284
原创 Python3实现翻转二叉树问题
Python实现翻转二叉树问题翻转一棵二叉树。# 二叉树的结构如下class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None# 解决方案class Solution: # 从根节点开始递归翻转其左子树和右子树 def invertTree(self,...
2020-03-28 13:39:54
374
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人