c/c++
种菜的
这个作者很懒,什么都没留下…
展开
-
suricata 结构体struct Pool_说明
suricata 内存池结构体struct Pool_结构体底层存储数据的是void*指针,所以可以存储任意类型的数据,我目前看到的tcp的分段和会话都使用该内存池进行存储,结构体分别是TcpSegment,TcpSession,在初始化函数PoolThreadInit->PoolInit中调用各自的内存分配函数进行内存分配。/* pool structure */typedef struct Pool_ { uint32_t max_buckets; pool的最大bucket原创 2022-01-06 15:30:20 · 843 阅读 · 0 评论 -
netfilter 学习练习一:通过目的端口过滤发出去的数据包
kernel版本 3.10.0-514.el7.x86_64netfilter框架通过在内核网络协议栈五个数据包处理点注册回调函数,调用这些回调函数实现数据包过滤、修改、转发。表示回调函数的hook结构体如下:struct nf_hook_ops { struct list_head list; //hook钩子函数双向列表,每一个hook点可以注册多个钩子函数 ...原创 2019-12-03 22:19:05 · 544 阅读 · 0 评论 -
Linux GDT全局描述符表-草图示之
1. 段描述符表寄存器系统设置的一个独立寄存器,用于存储段描述符表的内存地址和表的范围,就是表有多大,访问时不能超出表的范围。2. 段描述表系统中的一个数组,存储了很多段描述符,根据段寄存器存储的索引(即书上说的段选择子,忒太理解)确定内存段在段描述符表中的位置,进而取得段描述符信息,再根据段描述符信息的段基地址和段界限,得到内存段的内存地址。段寄存器存储的索引,是在保护...原创 2019-11-30 14:57:37 · 567 阅读 · 1 评论 -
list_entry(ptr, type, member) 与 container_of
#define list_entry(ptr, type, member) / container_of(ptr, type, member) #define container_of(ptr, type, member) / ({ ...原创 2019-11-28 23:26:43 · 217 阅读 · 0 评论 -
函数模板的特化
模板特化:就是在实例化模板时,对特定类型的实参进行特殊处理,即实例化一个特殊的实例版本,当以特化定义时的形参使用模板时,将调用特化版本,模板特化分为全特化和偏特化;1. 函数模板的特化,只能全特化;//泛型版本template int compare(const T &v1, const T &v2){ if(v1 < v2) return -1; if(v2 > v1) r原创 2012-08-28 16:30:03 · 16663 阅读 · 4 评论 -
std::tr1::shared_ptr
在 c++ 98 里面只有一种智能指针,就是 std::auto_ptr,因为具有唯一所有权的特征,所以限制了它的使用范围,比如你无法在容器中使用它。而我们知道 stl 容器是值语义的,如果不能用智能指针管理的话,只有两种办法来使用。一种是类似这样:std::vector names;names.push_back("cyberscorpio");std::string name("n转载 2013-08-28 16:50:10 · 3934 阅读 · 2 评论 -
epoll学习总结第一篇
epoll1. et模式:socket状态改变:缓冲区收到数据、关闭socket、,epoll_wait返回通知一次,不论是否接收完毕仅且通知一次,例如:客户端发送数据:”hello world!“ 服务端epoll_wait返回一次通知,然后recv 5个字节,接收到的是”hello“,此时缓冲区剩余数据为:“ world!”,然后继续epoll_wait,此时不会收到任何原创 2015-09-16 15:09:04 · 564 阅读 · 1 评论 -
模板编译模型
模板编译模型参考附件图片中的代码和注释原创 2016-02-03 15:04:26 · 388 阅读 · 0 评论 -
gdb调试core转储文件
1. 首先生成core文件,示例代码如下:#include #include #include void core1(){ char *p = NULL; *p = 'a'; printf("p:%s\n", p);}int main(){ core1(); return 0;}[ljq@ycy aup]$ gcc coredu原创 2016-05-16 18:34:04 · 1411 阅读 · 1 评论 -
Linux环境内存泄漏工具vargrind
今天又温习了一下linux下检测内存泄漏工具vargrind的使用:1. 从网上看,大家都用的是valgrind工具集,valgrind包含了几种工具: (1) memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。 (2) callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。 (3) cachegrind:分析CPU的cache命中率、丢失率原创 2016-05-23 11:16:08 · 2710 阅读 · 0 评论 -
Linux C函数strtok解析
1. 今天看了看strtok函数,特意找了下Linux内核2.0.1版本的代码,因为在更高版本(至少2.6)已经使用strsep替换了该函数.函数原型:char * strtok(char * s,const char * ct)使用第二个参数ct中的分隔符字符串,分割第一个参数s,ct参数的分隔符可以是任意字符,可以是单个字符的分隔符,也可以是字符串形式的分隔符如:"!,;'/"等,原创 2016-05-23 19:57:11 · 9071 阅读 · 1 评论 -
git 比较代码
git 比较代码,今天把本地工作目录的代码和版本库代码比较了一下,用到了如下命令,也学习了如何比较代码,不容易呀! 查看工作目录与本地仓库有哪些代码文件不同,-w选项忽略代码文件由空格变化引起的不同 git diff --stat -w 比较工作目录与本地仓库中的文件fm-stat.c,忽略空格引起的不同 git diff -w src/原创 2017-03-20 17:01:41 · 9117 阅读 · 0 评论 -
使用 C++11 array 插入排序
#include <iostream>#include <array>using namespace std;//2, 6, 1, 7, 4, 3, 8, 9, 5, 0void insert_sort(array<int, 10> &arr){ auto ite1 = arr.begin() + 1; for(it...原创 2019-01-07 21:57:41 · 274 阅读 · 0 评论 -
调用操作符的重载与函数对象
一:调用操作符重载:我们可以为类类型的对象重载调用操作符即小括弧”()“,定义了调用操作符的类,在使用定义的调用操作符时,行为就像是调用函数,所以这种对象称为函数对象,即行为类似函数的对象:如下例子为类A定义了调用操作符,功能是返回一个绝对值:class A{ public: int operator() (int val) { retu原创 2012-09-11 17:29:40 · 4248 阅读 · 4 评论 -
函数对象的函数适配器
一。标准库定义的函数对象:标准库定义了一组用于算术、关系、逻辑运算的函数对象类,他们都是类模板,定义在头文件functional中;1. 在这里举一个算术函数对象类型的例子:plus 对2个给定元素进行 + 运算,它定义了调用操作符的类模板,所以是二元函数对象;要对数值1和2进行加法运算,可以写如下代码:plus add; //定义加法运算的类模板的实例;int sum原创 2012-09-12 16:09:52 · 5425 阅读 · 7 评论 -
类的虚拟继承
一. 虚基类的声明:1. 虚继承:在以下类的定义层次中,Derived1与Derived2的对象将各自拥有一个基类子对象Base,类A作为Derived1与Derived2的派生类,将拥有2个基类子对象Base,一个存储在基类子对象Derived1中,另一个存储在基类子对象Derived2中,如果类A想使用两个基类子对象Base,这没问题,但是如果想共享同一个Base子对象,比如使用原创 2012-09-06 13:33:39 · 1158 阅读 · 1 评论 -
命名空间的定义与使用
1. 命名空间的定义:由关键字 namespace后边接着命名空间名字,之后接一对花括弧括住的一块声明和定义;//17.2.A.h 头文件定义命名空间 primer_17_2namespace primer_17_2{ //定义成员类A class A { public: int getA(); //成员函数,定义在命名空间的定义文件中,并且在命名原创 2012-09-03 15:35:23 · 26858 阅读 · 1 评论 -
基类与派生类之间的转换
一. 派生类到基类的转换:1. 可以使用派生类指针初始化基类指针,同样也可以使用派生类的引用或对象初始化基类的引用,注意这里提到的是对象的指针和引用而不是对象本身;将派生类对象传递给希望接受基类引用的函数时,不会进行对象转换,而是引用直接绑定到该对象,并未复制该对象;将派生类对象传递给希望接受基类类型对象的函数时,派生类对象的基类部分将被复制到函数的形参,派生类部分被切割;用派生类原创 2012-08-15 16:43:04 · 2351 阅读 · 0 评论 -
类模板static成员的使用
1. 与普通类的static成员一样,类内部声明一次,类外部定义一次,定义时可以设置也可以不设置初始值;2. 类模板内部声明与普通类的static成员一致://16.4.7.htemplate class Foo{public: static int count() { return cnt; }private: static int cnt; //类模板内部声明静原创 2012-08-27 13:43:54 · 2302 阅读 · 0 评论 -
复制构造函数与赋值操作符的重载
1. 试验功能:带有指针成员且指针成员为类类型时,自定义复制构造函数与赋值操作符的行为是怎样的。2. 试验结果:(1)当指针成员为一般普通成员时,我们可以自己在复制构造函数中为指针分配内存并拷贝内容,在赋值操作符函数中,检查或者删除左操作数的内存,并分配新内存然后拷贝内容到新分配内存中;(2)当指针成员为类类型(本例即是)时,称为第一级类类型的指针成员: 在复制构造原创 2012-08-10 16:21:23 · 1601 阅读 · 1 评论 -
模板编译模型
1. 当编译器看到模板定义(在模板实现文件中的定义)的时候,并不立即产生代码;只是在看到使用模板时,比如调用了函数模板或者为类模板定义对象的时候,编译器才产生特定类型的模板实例,即特定类型的代码;2. 一般而言,当调用函数的时候,编译器只需要看到函数的声明;定义类类型的对象时,类定义(一般在类头文件中)必须可用,但是成员函数的定义(在类实现文件中)不是必须存在的,因此应该将类定义和成员函数声明原创 2012-08-23 15:23:00 · 1709 阅读 · 0 评论 -
类模板友元声明的依赖性
1. 当为一个类模板声明友元类模板或函数模板时,如果授予给定模板所有实例访问权,那么,在作用域中不需要存在该类模板或函数模板的声明,实际上,编辑器将友元声明也当做类或者函数的声明对待;//template class Queue;//由于对类模板Queue的所有实例授予友元关系,所以不需要对类模板Queue进行事先声明,因为编译器将友元声明也当做声明template class Qu原创 2012-08-24 14:40:53 · 2832 阅读 · 0 评论 -
一 : using声明、using指示及其作用域详解
1. using 声明:一个using声明一次只能引入一个命名空间成员,从using声明点开始,直到包含该using声明的作用域结尾,声明的名字仅仅在该作用域是可见的,外部作用域中相同的名字被屏蔽,它可以出现在全局作用域,局部作用域或者命名空间作用域中,类中的using声明局限于使用其基类中定义的名字;using声明将名字直接放入出现using声明的作用域,好像using声明是命名空间成员的局原创 2012-09-06 17:15:41 · 19350 阅读 · 4 评论 -
类指针型成员管理
请参考:C++ Primer 第四版 13.5.1节:当一个类具有指针型成员时,我们不能使用编译器提供的合成复制构造函数和赋值操作符进行复制和赋值,必须显式定义它们,这时也需要显式定义析构函数;管理指针型成员有两种方法:1. 定义智能指针类:即定义一个类,该类包含存储数据的指针成员,一个普通的整形计数变量,构造和析构函数,在析构函数中直接删除存储数据的指针成员,计数变量用来记录原创 2012-08-20 13:35:47 · 979 阅读 · 0 评论 -
二 : using声明、using指示用于嵌套命名空间时的作用域
上一篇 using声明、using指示及其作用域详解 说的是函数内部或者全局作用域中使用using声明和using指示的情况,这里说的是在嵌套命名空间中使用using声明与using指示的情况。//named_namespace.h 命名空间成员声明与定义头文件#ifndef NAME_17_2_3#define NAME_17_2_3namespace name_17_2_3原创 2012-09-07 15:31:00 · 3702 阅读 · 2 评论 -
拷贝构造函数的疑问
A是一个类名,包含一个int 成员变量 i 和一个指针成员变量,为了方便大家解决问题,就只写了对成员i的操作:+操作符定义为成员:A A::operator+(const A &obj){ A tmp; tmp.i = i + obj.i; return tmp;}A::A(const A &obj):i(obj.i){ std::cout原创 2012-08-13 14:41:21 · 602 阅读 · 0 评论