
C++
文章平均质量分 77
啊浪的博客
细节决定一切。
最近会将很久之前总结的相关笔记整理成文章,以作总结。侵即删。
展开
-
Effective C++读书笔记
一、让自己习惯C++ 条款01:视C++为一个语言联邦1、C、Obeject-OrientedC++、Template C++、STL 条款02:尽量以const、enum、inline替换#define1、对于纯常量,最好以const对象或enums替换#define。(const有符号表便于输出调试信息、有范围scope可只设定类内常量、可封装带修饰符、类型安全。原创 2017-02-08 21:41:08 · 945 阅读 · 2 评论 -
C/C++模版
函数模板template void swap(T& a, T& b){}当调用模板函数时类型T就会被“被调用时的实参类型”自动所代替,比如swap(a,b)其中a和b是int型,这时模板函数swap中的形参T就会被int所代替。不能在函数调用的参数中指定模板形参的类型,对函数模板的调用使用实参自动推演来进行。类模板通式类模板形参不存在实参推演的问题原创 2017-10-29 17:42:30 · 297 阅读 · 1 评论 -
C/C++extern详解
在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,比如加上函数的参数类型等等。而在C中,只是简单的函数名字而已,不会加入其他的信息。也就是说C++和C对产生的函数名字的处理是不一样的.试想这样的情况:一个库文件已经用C写好了而且运行良好,这个时候我们需要使用这个库文件,但是我们需要使用C++来写这个新的代码。如果这个代码使用的是C++的方式链接这个C库文件的原创 2017-10-30 00:06:12 · 625 阅读 · 1 评论 -
C/C++宏
字节对齐#pragmapack(n)如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式。如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。宏的字符串操作#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。#defi原创 2017-10-29 12:08:10 · 351 阅读 · 1 评论 -
Makefile和GCC日常用法
GCC-I、-L、-lgcc -o hello hello.c -I /home/hello/include-L /home/hello/lib –lworld(大写i) -I/home/hello/include:表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找顺序:/home/hello/include--> /usr/include -->原创 2017-11-04 13:14:22 · 1654 阅读 · 0 评论 -
C/C++字节详解
下面介绍几个例子,让大家对字节有一个相对深刻的认识sizeof和strlen1、sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2、strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。例子int *p; sizeof(p)=4;sizeof(*p)相当于sizeof(int);对于静原创 2017-11-04 13:23:26 · 7151 阅读 · 1 评论 -
Linux锁API
flock、lockf和fcntlLinux的文件锁主要有两种:flock和lockf。lockf只是fcntl系统调用的一个封装。lockf或fcntl实现了更细粒度文件锁,即记录锁,可以对文件的部分字节上锁,而flock只能对整个文件加锁。应该避免在多线程场景下使用flock对文件加锁,而lockf/fcntl则没有这个问题。建议锁和原创 2017-10-14 10:51:17 · 1302 阅读 · 0 评论 -
深入C++对象模型读书笔记(一、关于对象)
# 参考资料https://www.cnblogs.com/yiranlaobaitu/p/3764422.htmlhttp://www.cnblogs.com/skynet/archive/2010/09/05/1818636.htmlhttps://zhidao.baidu.com/question/508981920.htmlhttps://www.cnblogs.com/LubinLew/...原创 2017-02-15 23:08:47 · 1613 阅读 · 0 评论 -
Linux内存布局、内存分配原理
Linux的虚拟内存管理有几个关键概念1.每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址2.虚拟地址可通过每个进程的页表与物理地址进行映射,获得真正物理地址3.如果虚拟地址对应的物理地址不在物理内存中,则产生缺页中断,并真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。原创 2017-05-21 22:09:09 · 13310 阅读 · 1 评论 -
linux文件IO
{ char *buf = malloc(MAX_BUF_SIZE); strncpy(buf, src, , MAX_BUF_SIZE); fwrite(buf, MAX_BUF_SIZE, 1, fp); fclose(fp);}malloc的buf对应图层中applicationbuffer,即应用程序buffer;调用fwrite后,把数据从app原创 2017-05-21 23:07:28 · 2130 阅读 · 1 评论 -
程序优化的那些事
系统设计层面攒包/定时地进行批量处理。提高单包承载率,减少网络io、减少系统调用次数。数据处理(cpu消耗型代码)、io独立线程处理。多地部署,就近接入。分set,避免跨城、跨地区流量访问。消息队列尽量无锁化、一写一读等。尽量减少无用的代理层,去中间商。灰度机制。内核级优化(操作系统多队列网卡特性等)。数据自动报表化,多维度原创 2017-10-08 15:56:55 · 471 阅读 · 0 评论 -
ELF、编译、链接、装载和库
ELF文件分类可重定位文件(Relocatable File)与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。可执行文件(Executable File)此文件规定了exec()如何创建一个程序的进程映像。共享目标文件(SharedObject File)首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理,生成另一个共享目标文件。其次原创 2017-05-18 21:20:02 · 1122 阅读 · 1 评论 -
解密函数调用
栈(Stack)1)栈在内存中是从高地址向低地址扩展。如下图,上高地址。因此栈顶地址是不断减小的,越后入栈的数据,所处的地址也就越低。2) 在32位系统中,栈每个数据单元的大小为4字节。3) 和栈的操作相关的两个寄存器是EBP寄存器和ESP寄存器的。ESP寄存器总是指向栈的栈顶,执行PUSH命令向栈压入数据时,ESP减4,然后把数据拷贝到ESP指向的地址;执行POP命令原创 2017-05-20 22:10:37 · 1310 阅读 · 1 评论 -
linux网络API细节
connect函数,是收到syn+ack,发送ack之后返回;accept函数跟三次握手没有关系,accept是从accept队列里面取一条已建立好的连接;bind函数只是进程占用ip+port;声明:该ip+port被这个进程占用了;backlog是listen函数传入的第二个参数客户端调用connect函数建立连接,内部是发送了一个SYN包到服务端.服务端原创 2017-10-08 11:44:22 · 656 阅读 · 1 评论