自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 REVM 解析 3 --- 新版本v97 的解析

新版本与之前的版本有了一些变化, 我们基于之前的解析来再次分析一下这个版本.

2025-12-05 09:32:39 477

原创 tokio 的理解

再次, tokio 是一种 Runtime 实现, tokio 会将这些 future 包装成 task, 放入到 tokio 内部的调度器序列.首先, 它会启动和管理一个线程池, worker threads, 线程的数目基本上与 CPU 的核数相对应.其次, rust 的语法 async await, 是会创建实现 Future 的状态机, 即通俗说的。基本上也是协程的范畴, 但不是传统的协程, 与 go 的基于栈的协程机制不同, 这个是基于状态机的.那么有个问题: 这些 task 是协程吗?

2025-11-26 01:49:17 127

原创 REVM 解析 2 --- Frame 的原理

Frame 是 EVM 调用栈中的执行上下文单元,封装一次合约调用(Call/Create)的完整执行环境。看一下代码。

2025-11-21 09:35:38 571

原创 REVM 解析

我们以 revm v21.0.0 版本开始解析, 后面的框架没有太大变化, 但是跟 v20.0 之前的版本, 框架有很大的变化.大概是以一个自底往上的顺序来排的. 我们后面也按照这个顺序来解析.

2025-11-16 18:16:44 118

原创 感受 Rust

首先, 有了它, 就可以将语句也纳入类型系统了, 这样子整个类型系统就完整了, 可以将所有的语言特性都归纳到类型系统之上. 类型系统可以做到如此的严谨性是我在学习 rust 之前所没有认识到的. 就接近于数学系统或者逻辑系统了.其次, 为什么用这个符号()来表示空呢?之前也没有过多的思考, 总是觉得用两个符号来表示一个概念, 是有点奇怪, 但是今天突然醒悟, 如果不用这个, 那么又能用什么呢?这个空类型, 我在学习 rust 之前是没有接触过的, 所以我对于有这样一个类型觉得很奇怪, 也很有趣.

2025-11-15 06:41:52 429

原创 Trait 和 Interface 的区别

Interface 是契约式抽象, 描述"应该做什么".Trait 是行为模块, 描述已经实现的行为, 可以混入(mixin).minxin 是什么?把一段可复用的行为,像拼积木一样加入到任意类型中,让该类型获得额外能力。* 不改变类型的本质* 不属于继承层级* 可以任意组合* 行为有默认实现* 不需要预先定义在类型内部为什么要混入?因为很多行为:* 和类型的主功能无关* 可以被多个类型共享* 不属于继承关系* 不该复制粘贴。

2025-11-15 06:14:13 370

转载 幂数的‘幂’的来历

转自https://www.guokr.com/question/501057/幂并非外来术语,其原意为盖东西的方布。《九章算数》第一章《方田》中的第二个问题如下:又有田广十二步,从十四步。问为田几何?答曰:一百六十八步。方田术曰:广从步数相乘得积步。所谓方田就是矩形的田,广是宽度,从是高度。对于这条问题,三国时刘徽注解道:此积谓田幂。凡广从相乘谓之幂。所以至少从三国时期,幂可以表示长宽相乘。唐李淳风则对刘徽注又有阐述说:经云广从相乘得积步,注云“...

2020-09-14 09:33:09 4207

原创 Rust切换allocator

Rust支持2个内存分配器(allocator):alloc_system和alloc_jemalloc。alloc_jemalloc不支持valgrind,valgrind是查看内存泄漏很有帮助的工具,所以在定位内存泄漏问题时,需要切换成alloc_system。The Rust Programming Language 第一版上的说明已经过时了,只写#![feature(alloc

2018-01-15 16:09:49 1374

原创 /proc文件系统读出来的数据是最新的吗?

每次从/proc下读出来的数据都是最新的,没有“更新时间”这一说。每当读文件时,数据都是即时生成的。参考:https://unix.stackexchange.com/questions/74713/how-frequently-is-the-proc-file-system-updated-on-linux

2018-01-08 18:08:47 535

原创 通过/proc/PID/status查看进程内存占用情况

网上有很多资料描述status的内容,但是有些是错误的。综合比较了一下,下面2个的内容应该是正确的。1、https://locklessinc.com/articles/memory_usage/VmPeak:Peak virtual memory usageVmSize:Current virtual memory usageVmL

2018-01-08 16:47:36 7821

原创 bitcoin 在ubuntu上的安装指南

doc中有指导文档https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md

2017-11-17 11:57:33 2322

原创 有趣的一句话

今天听到一句有趣的话:“写专利就是,自己挖一个坑,跳进去,然后再爬出来”。很形象的形容了“”寻找难点,钻进去研究,然后最终解决”这样一个过程。也可以用在写论文等等其他方面。最近还看到一句话:读博士写论文的过程,就是开始有个想法,然后不断重复,直到自己相信,最后整理出来的过程。

2017-11-15 18:09:18 705

转载 protobuf扫盲

今天来介绍一下“Protocol Buffers”(以下简称protobuf)这个玩意儿。本来俺在构思“生产者/消费者模式 ”系列的下一个帖子:关于生产者和消费者之间的数据传输格式。由于里面扯到了protobuf,想想干脆单独开一个帖子算了。  ★protobuf是啥玩意儿?  为了照顾从没听说过的同学,照例先来扫盲一把。  首先,protobuf是一个开源项目(官方站点在“这

2017-11-14 12:02:28 337

转载 ubuntu16.04 npm安装

https://www.howtoing.com/install-latest-nodejs-npm-on-ubuntu第1步:添加NodeJS的PPA首先,你需要Node.js PPA在我们的系统的NodeJS官方网站提供通过。我们还需要如果尚未安装安装python-software-properties。$ sudo apt-get install python-s

2017-11-13 17:22:33 10609

转载 让PIP源使用国内镜像

对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率。国内源:新版ubuntu要求使用https源,要注意。清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.

2017-11-13 16:56:39 514

转载 npm加速

淘宝镜像:http://npm.taobao.org/镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在):1.通过config命令(持久使用)设置命令:npm config set registry https://registry.npm.taobao.org //设置查看命令1:

2017-11-13 16:23:04 593

原创 程序员的幽默

这里面的一些话都是摘抄的,记录下来,玩味一下。A physicist, an engineer, and a computer scientist were discussing the nature of God. Surely a Physicist, said the physicist, because early in the Creation, God made Ligh

2014-02-14 09:49:34 915

原创 gperf工具的使用

我使用gperf工具是由于要裁剪字符转换库libiconv,libiconv库中就使用到了gperf这个工具,为了更好地理解iconv库,所以学习了一下gperf的使用。    关于gperf的介绍可以百度、google。GNU官方网站上的解释是:GNU gperf是一个完美的hash函数生成器。对于给定的一列字符串,它可以生成一个hash函数和hash表,以C或C++的形式。对于输入的字

2014-02-12 15:49:10 12881

转载 计算机界名人榜-----约翰·冯·诺依曼

约翰·冯·诺依曼 最简单的来说 他的精髓贡献是2点:2进制思想与程序内存思想20世纪即将过去,21世纪就要到来.我们站在世纪之交的大门槛,回顾20世纪科学技术的辉煌发展时,不能不提及20世纪最杰出的数学家之一的冯·诺依曼.众所周知,1946年发明的电子计算机,大大促进了科学技术的进步,大大促进了社会生活的进步.鉴于冯·诺依曼在发明电子计算机中所起到关键性作用,他被西方人

2012-08-21 11:36:20 13755

转载 计算机名人榜----- 阿兰·麦席森·图灵

阿兰·麦席森·图灵(Alan Mathison Turing,1912.6.23—1954.6.7)【简介】               英国数学家、逻辑学家,被称为人工智能之父。 1931年图灵进入剑桥大学国王学院,毕业后到美国普林斯顿大学攻读博士学位,二战爆发后回到剑桥,后曾协助军方破解德国的著名密码系统Enigma,帮助盟军取得了二战的胜利。       阿兰·麦席森

2012-08-21 11:35:00 8400

转载 C语言中size_t的陷阱

今天写了一个类似这样的程序:#include #include int main(){ int i = -1; if(i > strlen("Demon")) printf("Hello World"); else printf("Hello Demon"); return 0;}输出的竟然是Hello Wor

2012-08-09 11:43:05 1672

原创 linux编程:getenv,putenv,setenv

1、getenv   头文件 #include函数原型 char * getenv(const char *name);函数说明 getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。返回值

2012-08-09 11:12:09 12648

原创 字符串变小写

ngx代码中,字符转化为小写的宏是:#define ngx_tolower(c)   (u_char) ((c >= 'A' && c 如果c在[A, Z]之间,与上0x20,就会变成小写的字符。原因是A === 0x41,Z===0x5A,41的二进制表示为0100 0001,5A的二进制表示为0101  1010,而0x20的二进制表示为0010  0000。大写字母的高4位中的第三位

2012-08-08 10:31:08 831

转载 Nginx源码分析-内存池

本文转自淘宝平台http://www.tbdata.org/archives/1390,不是为了夺他人之美,只是觉得写得很好,怕淘宝万一删掉就找不到了,放在这里保存一下。大家可以直接链接过去,他们那个页面做的还是不错的。Nginx源码分析-内存池Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内

2012-08-07 10:48:24 845

原创 内存分配地址的对齐

void * memalign (size_t boundary, size_t size) 看nginx源代码中的实现#define ngx_align(d, a)     (((d) + (a - 1)) & ~(a - 1)) 返回的地址值为d后第一个是a的整数倍的值。a是2的整数次幂。假设a = 2^n,即a的二进制表示中末尾有n个0。假设返回的结果为A。则A-d的

2012-08-03 18:35:01 1330

转载 linux memalign、valloc函数

在GNU系统中,malloc或realloc返回的内存块地址都是8的倍数(如果是64位系统,则为16的倍数)。如果你需要更大的粒度,请使用memalign或valloc。这些函数在头文件“stdlib.h”中声明。    在GNU库中,可以使用函数free释放memalign和valloc返回的内存块。但无法在BSD系统中使用,而且BSD系统中并未提供释放这样的内存块的途径。

2012-08-03 16:20:27 22055

转载 c语言NULL和0区别

转载自:http://www.cnblogs.com/youxin/archive/2012/03/27/2420023.html先看下面一段代码输出什么:#includeint main(){ int *p=NULL; printf("%s",p); }输出(null) ,单步调试可以看出执行int *p=NULL,p的值为0x0000000

2012-08-03 16:17:25 23928 2

转载 TCP listen() Backlog 参数详解

int listen(int fd, int backlog);socket系统调用listen只被tcp 服务器使用,他做两件事:1. 将未链接的套接口转换为被动套接口,指示内核接受向此套接口的连接请求,调用此系统调用后tcp 状态机有close转换到listen.2.第二个参数制定了内核为此套接口排队的最大连接个数。关于第二个参数,对于给定的监听套接口,内核要维护两个队

2012-08-01 15:20:10 12902

转载 ioctl函数

本函数影响由fd 参数引用的一个打开的文件。   #include int ioctl( int fd, int request, .../* void *arg */ ); 返回0 :成功    -1 :出错   第三个参数总是一个指针,但指针的类型依赖于request 参数。 我们可以把和网络相关的请求划分为6 类: 套接口操作 文件操作 接口操作

2012-07-20 12:01:47 825

转载 ioctl中的ifconf ifreg 结构

用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考.首先先认识一下ifconf和ifreq://ifconf通常是用来保存所有接口信息的//if.hstruct ifconf{int ifc_len

2012-07-20 11:37:30 1802

翻译 RFC894--以太网上IP数据报的传输标准

备忘录状态这篇RFC阐述了一种在以太网上封装IP数据报的标准方法。这篇RFC是为ARPA-INTERNET社区提供的。 介绍本备忘录适应于以太网(10Mbps,48bit地址)。详细描述了IP数据报在试验型以太网(Experimental Ethernet)上的传输过程。 帧(Frame)格式IP数据报以标准以太网帧格式进行传输。以太网帧中的type字段必须包含十六进制

2012-07-19 12:10:09 3081

转载 简介struct cmsghdr结构

附属信息可以包括0,1,或是更多的单独附属数据对象。在每一个对象之前都有一个structcmsghdr结构。头部之后是填充字节,然后是对象本身。最后,附属数据对象之后,下一个cmsghdr之前也许要有更多的填充字节。在这一章,我们将要关注的附属数据对象是文件描述符与证书结构。下图显示了一个包含附属数据的缓冲区是如何组织的。我们需要注意以下几点:cmsg_len与CMSG_LEN

2012-07-19 12:06:14 14641

转载 sendmsg recvmsg函数

sendmsg(2)与recvmsg(2)函数这些函数为程序提供了一些其他的套接口I/O接口所不具备的高级特性。下面的内容我们将会先来看一下sendmsg来介绍这些主题。然后将会完整的介绍recvmsg函数,因为他们的函数接口是相似的。接下来,将会描述msghdr的完整结构。sendmsg(2)函数现在是时候进入这个大同盟了。从概念上说,sendmsg函数是所有写入函数的基础,而他是从

2012-07-19 12:05:40 25688

转载 简介I/O向量、sendv、writev

在我们了解使用附属数据工作的复杂函数之前,我们应该熟悉被readv(2)与writev(2)系统调用所使用的I/O向量。我们不仅将会发现这些函数是十分有用的,而他们的工作方式也被引入了一些附属数据函数中。这会使得后面的理解更为容易。I/O向量(struct iovec)readv(2)与writev(2)函数都使用一个I/O向量的概念。这是由所包含的文件定义的:#include s

2012-07-19 12:05:07 6581

转载 内核中用于数据接收的结构体struct msghdr

我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构。在我们的虚拟机上发送icmp回显请求包,ping另一台主机172.16.48.1。我们使用系统调用sendto发送这个icmp包。     ssize_t sendto(int s, const void *buf, size_t len, int flags,

2012-07-19 12:03:25 1352

转载 fork的返回值

fork简介:         fork英文原意是“分岔,分支”的意思,而在操作系统中,乃是著名的Unix(或类Unix,如Linux,Minix)中用于创建子进程的系统调用。 【NOTE1】 fork () 的作用是什么?换句话说,你用 fork () 的目的是什么? ――是为了产生一个新的进程,地球人都知道 :)产生一个什么样的进程? ――和你本来调用 fork (

2012-07-18 17:06:09 719

转载 环境变量

一、什么是环境变量? Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义,这组变量被称为环境变量。用户可以对自己的环境变量进行修改以达到对环境的要求。二、定制环境变量 环境变量是和Shell紧密相关的,它是通过Shell命令来设置的。环境变量又可以被所有当前用户所运行的程序所使用。对于bash来说,可以通过变量

2012-07-18 11:05:11 581

转载 hosts文件与resolv.conf文件

一. Hosts文件的位置 在Windows 2000/XP/Vista系统中位于\%Systemroot%\System32\Drivers\Etc 文件夹中。二. Hosts文件的基本内容和语法 用记事本打开hosts文件,就可以看见了微软对这个文件的说明。Hosts文件文一般有如下面的基本内容 # Copyright (c) 1993-1999 Microsoft Cor

2012-07-04 09:39:40 5407

转载 看看牛人们是怎么评价编程语言的

Basic一个有过 BASIC 编程经历的人是很难学会好的编程习惯的。作为一个潜在的程序员,他们已经被脑残并且无法修复。-- Edsger Wybe Dijkstra,Dijkstra 算法发明者CC 语言程序就像一群拿着刀的人在刚刚打过蜡的地板上快速的跳舞。-- Waldi Ravens罗马帝国衰败的主要原因之一是因为他们缺少0,他们没有办法知道他们的 C

2012-07-02 18:43:15 844

转载 vmware网络模式设置(说的最简单的一篇文章)

VMware 提供四种网络连接方式 ========================================================= Bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,和linux下一个网卡 绑定两个不同地址类似,实际上是将网卡设置为混杂模式,从而达到侦听多个IP的能力. 在此种模式下,虚拟机内部的网卡(例如linux下的eth0

2012-07-02 17:03:17 594

nginx源码分析

nginx 源码 分析 讲的很详细,是网上的人从csdn博客 “啃饼的技术博客” 中 的文章总结出来的,可以看他的博客

2012-07-31

空空如也

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

TA关注的人

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