- 博客(114)
- 资源 (5)
- 收藏
- 关注
原创 Rust println!宏(Rust打印方法、println!()、Rust格式化输出、Rust格式化字符)(对齐标记<^>、宽度、正负号、井号#进制前缀、精度、数据打印类型、千位分隔符)格式化参数
在 Rust 中,宏(macros)提供了一种方式来写可扩展的代码,在编译时进行代码的扩展。println!是一个宏而不是函数,这意味着在编译时,println!宏的代码会被展开,插入到调用它的地方。自定义类型可以实现或fmt::Debug// 测试代码x: i32,y: i32,write!println!
2025-01-11 14:55:22
825
2
原创 float和double取值范围
float的指数范围为-2^7~2^7-1(即-128~127),而double的指数范围为-2^10~2^10-1(即-1024~1023),并且指数位是补码的形式来划分的。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。所以byte取值范围是:-2^7~2^7-1,即:-128~127(因为0也包括在内,所以在正数范围是2^7-1)
2024-12-18 20:50:59
459
原创 findmnt、lsblk、mount 命令查看磁盘、目录挂载、挂载点以及文件系统格式等情况
findmnt 展示出了目标挂载点( TARGET )、源设备( SOURCE )、文件系统类型( FSTYPE )以及相关的挂载选项( OPTIONS ),当然我们知道linux 一切都是以 / 为基础进行相关的挂载操作,其他设备或者文件系统都挂载在根下面的不同目录下。df 命令被用来报告文件系统的磁盘空间使用情况。这里也通过df -i 命令 一可以查看inode使用情况,二可以查看挂载点和磁盘关系。根( / )文件系统的类型是 xfs。运行下面的命令来找出某个特定分区的文件系统类型。
2024-08-26 09:48:22
1439
原创 skynet源码阅读<7>--死循环检测
除了for循环之外的其它循环,比如while或repeat,在LUA中都是通过条件判断结合JMP跳转来实现的,因此也是可以被检查报错的。至此,如何打断死循环并报错跳出的处理我们已经清楚了,可是新的问题又来了,skynet中是如何检测到死循环发生的呢?这样,当线程X处理消息陷入长久的阻滞时,monitor线程便会检测到X正在处理消息(skynet_monitor->destination不为空)并且version未改变,给出警告。可以看到,signal为0时,将skynet_sig_L置空。
2024-07-28 16:47:35
641
转载 Lua 堆栈的工作原理和使用方式
通过避免频繁的对象创建和销毁、减少不必要的对象拷贝、合理设置垃圾回收参数、使用适当的数据结构等方法,可以提高堆的性能和内存利用效率。需要注意的是,Lua的堆中存储的是对象本身的数据,而不是对象的引用或指针。需要注意的是,栈上的数据是临时存储的,并不持久保存。总之,Lua的堆是一个用于存储动态分配的数据的区域,通过内置的垃圾回收机制进行管理。在使用Lua堆时,应注意适当地创建和销毁对象,管理引用计数,避免不必要的对象创建,以及高效使用内存,以确保程序的性能和内存管理的有效性。栈中存储的是各种Lua值的副本。
2023-11-12 03:31:05
171
转载 Lua 堆栈的工作原理和使用方式
通过避免频繁的对象创建和销毁、减少不必要的对象拷贝、合理设置垃圾回收参数、使用适当的数据结构等方法,可以提高堆的性能和内存利用效率。需要注意的是,Lua的堆中存储的是对象本身的数据,而不是对象的引用或指针。需要注意的是,栈上的数据是临时存储的,并不持久保存。总之,Lua的堆是一个用于存储动态分配的数据的区域,通过内置的垃圾回收机制进行管理。在使用Lua堆时,应注意适当地创建和销毁对象,管理引用计数,避免不必要的对象创建,以及高效使用内存,以确保程序的性能和内存管理的有效性。栈中存储的是各种Lua值的副本。
2023-11-12 03:28:32
496
转载 常用设计模式
总之,模板方法模式是一种常用的设计模式,它通过定义算法的骨架和抽象方法,将算法的具体实现延迟到子类中。模板方法模式通过在抽象类中定义算法的框架,将具体实现延迟到子类中,从而使得子类可以根据需要重新实现特定的步骤,同时保持算法的结构不变。工厂模式将对象的实例化过程封装在一个工厂类中,客户端通过调用工厂类的方法来获取所需的对象,而不需要直接使用new关键字实例化对象。建造者模式的主要目的是通过一个独立的建造者类来封装对象的构建过程,客户端只需指定具体的建造者,而无需知道具体的构建细节。
2023-11-12 02:17:54
104
转载 C++ 指针
总之,指针是一个强大而灵活的工具,但同时也需要谨慎使用。合理管理指针的生命周期、避免野指针和悬空指针,以及正确释放动态分配的内存,都是确保指针使用正确和安全的关键。理解并遵循指针的最佳实践,可以避免这些问题,并提高代码的正确性和安全性。C++ 中的指针是一个重要的概念,它允许我们直接访问和操作内存地址。解决方法是在使用指针之前,确保它被初始化或赋值为有效的内存地址。解决方法是确保指针在合法范围内进行访问,避免越界访问。解决方法是在解引用之前,确保指针指向有效的内存地址。,或者避免在释放内存后继续使用指针。
2023-11-12 02:14:30
61
原创 lua socket客户端 lua string.pack字符串打包
lua socket客户端 lua string.pack字符串打包_gdut17的博客-优快云博客
2023-04-20 15:00:23
336
转载 CMake学习
可以用来指定工程的名字和支持的语言,默认支持所有语言PROJECT (HELLO) 指定了工程的名字,并且支持所有语言—建议PROJECT (HELLO CXX) 指定了工程的名字,并且支持语言是C++PROJECT (HELLO C CXX) 指定了工程的名字,并且支持语言是C和C++该指定隐式定义了两个CMAKE的变量_BINARY_DIR,本例中是 HELLO_BINARY_DIR_SOURCE_DIR,本例中是 HELLO_SOURCE_DIR。
2023-03-24 22:44:24
319
转载 pthread_cond_wait学习笔记
pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件。一:条件变量的初始化:条件变量和互斥锁一样,都有静态动态两种创建方式,静态方式使用PTHREAD_COND_INITIALIZER常量初始化。pthread_cond_t cond = PTHREAD_COND_INITIALIZER;动态方式初始化:1 首先要new或者malloc一个pthread_cond_t类型变量,用完后记得delete或者free掉。2 动态方式调用pthread_cond
2022-01-26 15:15:57
402
转载 函数pthread_cond_init()的使用方法
条件变量的结构为pthread_cond_t,函数pthread_cond_init()被用来初始化一个条件变量。它的原型为: extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr)); 其中cond是一个指向结构pthread_cond_t的指针,cond_attr是一个指向结构pthread_condattr_t的指 针。结构 pthread_cond
2022-01-26 14:52:46
3800
2
原创 SKYNET CONFIG
include "config.path"-- preload = "./examples/preload.lua" -- run preload.lua before every lua service runskynetdir = "/home/arch/git/skynet/"thread = 8logger = nillogpath = "."harbor = 1address = "127.0.0.1:2526"master = "127.0.0.1:2013"star...
2022-01-02 17:51:59
3421
转载 Skynet服务器框架——C源码剖析启动流程
在Linux下配置安装 skynet 的环境这里略过,为了从底层更好地理解整个框架的实现过程,我们有必要剖析一下源码,由于底层的源码都是用C语言写的,lua脚本基本是用来进行业务层开发,所以我们从C源码开始解读框架。打开下载包的 skynet-src 目录,这里是skynet框架的核心C源码,接下来我们就要来解读 skynet_main.c 和 skynet_start.c 这两个与skynet启动相关的C源码。1.入口函数和初始化:我们启动 skynet 使用的指令 ./skynet exampl
2021-06-08 09:29:02
493
原创 加载动态链接库——dlopen dlsym dlclose
加载动态链接库——dlopen dlsym dlclosehttps://www.cnblogs.com/ZhaoxiCheung/p/9424930.html
2021-06-07 17:35:55
104
原创 Linux 信号
linux中sigaction函数详解https://blog.youkuaiyun.com/weibo1230123/article/details/81411827
2021-06-07 15:19:06
86
原创 jemalloc内存占用问题
https://www.cnblogs.com/Lifehacker/p/jemalloc_settings.html
2021-06-05 11:49:40
560
转载 使用 jemalloc profile memory
对于长时间运行的服务端程序,内存的使用一直是一个非常重要的监控指标,当内存的使用量一直在上升的时候,我们就需要警觉起来,因为很有可能整个系统出现了内存泄露。那么剩下的问题就比较简单了,如何动态的获知哪里有内存泄露呢?对 Go 的程序来说,我们可以使用语言内置的 pprof 工具非常方便的对内存进行 profile,我们只需要在程序里面 import _ "net/http/pprof",这样启动的 HTTP server 服务器就能够被直接 profile 了。但对 Rust,情况就没那么简单了。因
2021-06-05 11:26:12
2558
转载 ulimit
ulimint -a 用来显示当前的各种用户进程限制Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进程数,一些需要设置为无限制:数据段长度:ulimit -d unlimited最大内存大小:ulimit -m unlimited堆栈大小:ulimit -s unlimited我们在用这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件:ulimit -c unlimited生成core文件,###...
2021-06-05 11:14:44
1242
转载 Skynet 服务创建流程
根据设计综述Skynet 是为了让服务器充分利用多核优势,将不同的业务放在独立的执行环境中处理。Skynet 核心功能是加载一个 C 模块(动态库),模块用数字 id 标识,作为其 handle ,模块被称为服务 service。服务间可以自由发送消息。每个模块可以向 Skynet 框架注册一个 callback 函数,用来接收发给它的消息。每个服务是被一个个消息驱动,当无消息时,服务处于挂起状态。每个服务拥有一个属于自己的消息队列,框架中存在一个全局队列负责调度处理服务所接收到的消息。代码层面..
2021-06-02 20:51:24
1255
转载 skynet1.0阅读笔记_skynet的启动
首先看skynet的启动,函数入口在 skynet_main.c 的main(),其中最重要的是: skynet_start(&config);在skynet_start中做了两个启动: //启动了snlau服务,然后加载launch服务 bootstrap(ctx, config->bootstrap); //创建monitor,timer,socket,worker线程等 start(config.
2021-06-02 20:17:37
413
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人