随笔分类 -  语言

C++、C、Python等等
摘要:说在前面 如果你了解过一些垃圾回收的方案,那么你应该会对垃圾回收的大致流程有些了解。本文适合略懂垃圾回收(GC)的人阅读,这里只是讲python3的垃圾回收算法,不是科普文! 环境:python 3.6.12 源码:https://www.python.org/downloads/release/p 阅读全文
posted @ 2021-01-07 21:27 xcw0754 阅读(239) 评论(0) 推荐(0)
摘要:白色:待回收的对象 灰色:待遍历的对象 黑色:不回收的对象 主要流程: 1、从根集开始遍历 2、遍历到的白对象标灰入栈,遍历到灰色、黑色对象则跳过。 3、每次从栈中pop一个灰色对象标黑,并遍历它引用的对象(处理方式参考2) 4、直到栈为空,一次性将白色对象清理出内存。 流程特点: 第2、3步是可以 阅读全文
posted @ 2020-03-09 21:20 xcw0754 阅读(848) 评论(0) 推荐(0)
摘要:数据结构 下面的结构体是lua中用于表示一个table,主要关注里面的array和node。 typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means tagmethod(p) is not present */ lu_byt 阅读全文
posted @ 2019-08-27 10:02 xcw0754 阅读(1044) 评论(0) 推荐(0)
摘要:net/core/dev.c int __init net_dev_init(void) { queue backlog.poll = process_backlog; open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL); open_softirq(N 阅读全文
posted @ 2018-12-06 22:02 xcw0754 阅读(764) 评论(0) 推荐(0)
摘要:epoll为什么这么快?当数据包到达时,socket是怎么通知epoll的? (PS:既然要看内核,那就只关心想知道的内容,否则可能会把自己绕晕了!) 先看怎么注册监听句柄的: long sys_epoll_ctl(int epfd, int op, int fd, struct epoll_eve 阅读全文
posted @ 2018-12-05 21:29 xcw0754 阅读(228) 评论(0) 推荐(0)
摘要:介绍 了解一下C与C++如何合作,gcc和g++编译出来的东西有什么区别。C++为了支持重载等特性,编译出来的符号和C是不一样的。 每个公司都会有一些古老的库,几乎每个程序都在使用它,它可能是C写的,或者是C++写的,通常情况下,我们能做的就是调用里面的函数,而不能修改这个库,因为很多程序都在用它, 阅读全文
posted @ 2018-11-14 20:35 xcw0754 阅读(1742) 评论(0) 推荐(1)
摘要:001 以lambda作为返回值该如何声明? 标准库提供了 模板可以直接声明,如 。如下函数 返回了一个函数指针,该指针接受两个参数,返回类型为int。 阅读全文
posted @ 2018-11-11 21:45 xcw0754 阅读(253) 评论(0) 推荐(0)
摘要:需求场景 如果使用多线程,那么几乎都会用到全局变量,这时初始化全局变量的技巧就很重要了。 通常初始化全局变量时就是像下面这样的,先判断是否已经初始化过了,然后才去初始化。在单线程场景下,lazy初始化(就是用到时才初始化)一般是下面这样写的,这没问题。但是多线程场景下就不能这样写了,我们要先给 创建 阅读全文
posted @ 2018-09-22 17:52 xcw0754 阅读(1200) 评论(0) 推荐(0)
摘要:bind1st()和bind2nd()是两个函数,用于将二元算子转成一元算子。 何谓二元算子? 比如 等等这些就是二元算子,即需要两个操作数的运算符。 何谓一元算子? 比如 等等这些就是一元算子,即只需要一个操作数的运算符。 bind2st()的使用 其实这个函数并没有强大到可以真的实现二元算子转一 阅读全文
posted @ 2018-01-18 16:49 xcw0754 阅读(480) 评论(0) 推荐(0)
摘要:Pike的安装(Ubuntu环境) pike的语法非常像C++,但是它也是脚本语言,所以具有一般脚本语言的特性。一个简单的pike程序,hello world: string的用法,及命令行参数的例子: 再看看下面段小代码,会觉得更加熟悉: 不过map就不是C++中的map了,而是一个用于简单地代替 阅读全文
posted @ 2015-12-22 11:41 xcw0754 阅读(401) 评论(0) 推荐(0)
摘要:详解列表List这里是列表对象方法的清单:list.append(x) 添加一个元素到列表的末尾。相当于a[len(a):]=[x]。list.extend(L) 将给定列表L中的所有元素附加到原列表a的末尾。相当于a[len(a):]=L。list.insert(i,x) 在给定位置插入一个... 阅读全文
posted @ 2015-12-20 21:07 xcw0754 阅读(284) 评论(0) 推荐(0)
摘要:Python源文件默认以UTF-8编码。在这种编码下,世界上大多数语言的字符可以在字符串,标识符和注释中同时使用 — 尽管标准库中的标识符只使用ASCII字符,它是可移植代码应该遵循的一个惯例。为了能够正确显示所有的这些字符,你的编辑器必须能够识别文件是UTF-8编码,且必须使用支持文件中所有字符的 阅读全文
posted @ 2015-12-20 11:06 xcw0754 阅读(204) 评论(0) 推荐(0)
摘要:1.可变参函数的原理 C/C++函数的参数是存放在栈区的,并且参数的入栈是从参数的右边开始,即最后一个参数先入栈,而第一个参数最后才入栈,所以,根据栈的后进先出性质,函数总能找到第一个参数。所以,可变参函数的实现必须能够从已知参数中获取到函数所需要参数的个数,否则怎么知道传了几个参数呢。 例如pri 阅读全文
posted @ 2015-11-21 23:22 xcw0754 阅读(1786) 评论(0) 推荐(0)
摘要:这里的例子全部来自陈皓的 C++ 对象的内存布局(上),经过修改的。而C++ 对象的内存布局(下)看了没有什么问题的样子,没有时间测试了。 编译器:g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2 环境:ubuntu 15.04 64位系统(地址占8字节) 1、单一继承 单一的 阅读全文
posted @ 2015-11-18 11:34 xcw0754 阅读(210) 评论(0) 推荐(0)
摘要:这里的例子全部来自陈皓的C++ 虚函数表解析,经过修改的。编译器:g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2环境:ubuntu 15.04 64位系统(地址占8字节)例子1: 1 #define LL long long 2 3 class Base { 4 publi... 阅读全文
posted @ 2015-11-18 09:40 xcw0754 阅读(277) 评论(0) 推荐(0)
摘要:条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数,这笔开销还是很大的。现在的新编译器已经可以对这种情况进行优化了,甚至优化到连开销都没有,只是有... 阅读全文
posted @ 2015-11-16 18:36 xcw0754 阅读(248) 评论(0) 推荐(0)
摘要:构造函数也可能发生内存泄露,考虑如下程序: 1 class A 2 { 3 public: 4 A(int *p) 5 { 6 if(p!=NULL) num=p; 7 else p=new int(0); 8 //do so... 阅读全文
posted @ 2015-11-15 23:56 xcw0754 阅读(236) 评论(0) 推荐(0)
摘要:1. 要求对象分配在堆上 临时对象一般是存在于栈中的,或者是静态对象存在于常量存储区的。那么当创建一个这样的对象的时候,一般是需要隐式或显式地调用构造函数,在销毁的时候调用析构函数的。可以从这方面入手,去限制构造或析构一个对象,从而达到禁止的效果。很明显,我们可以将构造/析构函数设为priva... 阅读全文
posted @ 2015-11-15 13:50 xcw0754 阅读(249) 评论(0) 推荐(0)
摘要:setjmp与longjmp是属于C语言中的,当然,C++也会有这两个函数了。他们的原型如下:int setjmp( jmp_buf env );作用:第一次调佣时,将寄存器的当前状态信息全部存入到env中,并返回0。如果在某处调用了longjmp(env,x),且x!=0,则setjmp的返回值将... 阅读全文
posted @ 2015-11-15 09:26 xcw0754 阅读(337) 评论(0) 推荐(0)
摘要:问题: 如何限制类对象的个数?比如1个,10个等等。方法(1): 将类的构造函数定义为private,那么就无法实例化这个类了。但是如何创建1个对象出来?方法有2种: 1.声明一个友元函数,那么在友元函数中就可以调用构造函数了,创建对象时使用static限制,那么就保证只有一个对象了。类似的定... 阅读全文
posted @ 2015-11-14 23:25 xcw0754 阅读(241) 评论(0) 推荐(0)