- 博客(28)
- 资源 (1)
- 收藏
- 关注
原创 局部变量内存分配时间、静态变量的初始化时间、常量折叠
例1 局部变量void Test1(){ ………… int buf[1024 * 1024]; …………}在windows下,由于栈限制为1M,上面代码可能会栈溢出,因此通过单步调试我们可以知道,局部变量是在进入函数时分配栈内存。编译器在编译的过程中,遇到函数调用时,会加入几条汇编指令。这些汇编指令的作用是: 1 分配一段栈空间,用于存放被调函数的参数...
2018-07-23 19:06:34
2845
原创 动态链接与静态链接
静态库Linux下的静态库通常以.a为后缀,用于创建.a的工具为ar(archive的缩写).静态库链接后会将所有数据会添加到调用程序, 因此使用静态库的程序体积可能较大,但是使用静态库的程序不需要外部依赖项.举例以hello.cpp、hello.h为例生成目标文件 g++ -c hell.c -o hello.o生成静态库 ar -crv libhello.a hel...
2018-07-16 20:07:50
204
原创 C++ 对象的内存布局理解(棱形继承)
C++ 对象的内存布局理解以下是我看完陈皓的C++对象的内存布局后的一些理解普通继承单一继承(A->B, B->C) 虚函数表在最前面被重载的虚函数得到更新,未重载的虚函数按照声明和继承顺序排在后面数据成员在虚函数表后面,按照声明和继承顺序排在后面多重继承((A,B,C)->D) 每个父类都有自己的虚表,虚表后面是父类的数据成员,子类成员在所有父类内存布局...
2018-05-04 20:45:10
225
原创 成员函数内delete this
delete this以下引用自:http://www.cppblog.com/lovedday/archive/2008/06/03/52060.html 成员函数调用delete this合法吗? 只要你小心,一个对象请求自杀(delete this),是可以的。 以下是我对“小心”的定义: 你必须100%的确定,this对象是用 new分配的(不是用new[],...
2018-05-04 20:42:18
302
转载 TCP的7种定时器
转自:https://www.cnblogs.com/33debug/p/7060752.htmlutm_source=itdadao&utm_medium=referralTCP七种定时器超时重传定时器TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到还没有收到确认,就要重传这个报文段。持续计时器TCP 为每一个连接设有一个持续计...
2018-04-13 23:31:22
192
原创 select、poll、epoll浅析
select、poll、epoll浅析select概念接口int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);writefds:”可写“状态的描述符集合readfds:”可读“状态的描述符集合exceptfds:”异常“状态...
2018-04-02 16:56:50
120
原创 IO模型
IO模型服务器编程中常用的4种IO模型:同步阻塞IO(Blocking IO)同步非阻塞IO(non-blocking IO)IO多路复用(IO Mutiplexing)异步IO(Asynchronous IO)同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;异步是指用户线程发起IO请求后...
2018-03-20 21:55:21
195
原创 可重入与线程安全
可重入与线程安全概念线程安全函数:函数可以同时被多个线程调用,并安全访问共享数据(各个线程有序访问)。可重入函数:函数可以同时被多个线程调用,但每个线程只能使用各自的数据。线程安全的类:每个线程使用这个类的相同的实例,成员函数也可以被每线程安全调用。可重入的类:每个线程使用这个类的不同的实例,成员函数就可以被每线程安全调用。可重入性 class Counte...
2018-03-15 15:56:18
141
原创 [STL源码剖析]序列容器
序列容器Vector概念vector维护的迭代器有三个: start:目前使用空间的头end:目前使用空间的尾end_of_storage:目前可用空间的尾增加新元素时,如果超过当时的容量,则容量则会扩充2倍。扩充不是在原有空间上新增,而是需要重新配置、元素移动、释放原空间等过程。 当然,vector的每种实现都可以自由地选择自己的内存分配策略,分配多少内存取决于其...
2018-03-11 16:11:59
171
原创 [STL源码剖析]空间置配器allocator
空间置配器allocatorplacement new 与 newnew关键字操作:调用operator new为对象申请内存在申请到的内存地址上调用对象的构造函数返回对象的地址placement new的作用不是开辟新内存,是在指定内存块上构造对象。举例class A {...};class B {...};A* pa = new A;pa-&...
2018-03-09 16:33:35
218
原创 局部性原理
局部性原理时间局部性(Temporal Locality)如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。应用将某些数据在一段时间内集中处理,提高cache利用率空间局部性(Spatial Locality)在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的。应用数组逐行遍历效率比逐列遍历效率高,因为地址步进较小...
2018-02-14 16:48:21
743
原创 fork(),vfork(),写时复制(Copy-On-Write, COW)
fork()与写时复制(Copy-On-Write, COW)概念fork函数:返回子进程的pid给父进程:父进程没有函数可以获取所有子进程的pid。返回0给子进程:子进程可以通过getppid获取父进程的pid;而PID=0是内核交换进程,不可能是子进程,因此返回0作为标识,与父进程区分。COW技术:Linux的fork()使用写时复制技术,父子进程用的是相同的物...
2018-02-14 16:25:19
383
原创 ubuntu日常问题
日常遇到的一些问题及解决方法,这里备个档。 基于 ubuntu 16.04ubuntu日常问题aptubuntu 16 使用 apt 替代 apt-get 和 apt-cache使用apt-get安装软件包时中途杀死进行后出错sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock虚拟机增...
2017-11-26 19:47:53
301
原创 [effectiv c++]条款39:明智而审慎地使用private继承
class Timer {public: explicit Timer(int tickFrequency); virtual void onTick() const; ……};class Widget : private Timer {private: virtual void onTick() const; ……};private继承代替方法: 继
2017-09-23 14:35:26
203
原创 [effectiv c++]条款37:绝不重新定义继承而来的缺省参数值(动态绑定,静态绑定,多态性)
动态绑定与静态绑定静态类型,就是它在程序中被声明时所采用的类型,在编译期确定,不可更改。 动态类型,则是“目前所指的对象的类型”,在运行期决定的,可以更改。 静态绑定,绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。 动态绑定,绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。静态多态性与动态多态性静态多态性:函数多态性——函数重载
2017-09-22 20:44:44
289
原创 [effectiv c++]条款33:避免遮掩继承而来的名称(重载,覆盖,隐藏)
class Base{private: int x;public: virtual void mf1() = 0; virtual void mf2(); void mf3(); ……};class Derived: public Base{public: virtual void mf1(); void mf4(); ...
2017-09-19 21:17:50
316
原创 [effectiv c++]条款25:考虑写出一个不抛出异常的swap函数(pimpl手法)
缺省状态 只要类型T支持copy构造函数和copy assignment。namespace std { template<typename T> // template<> 表示它是 std::swap 的一个全特化版本 void swap(T& a, T& b)// 函数名称后的 <Widget> 表示这一特化版本...
2017-09-19 19:16:50
301
原创 [effectiv c++]条款21:返回reference 与 返回object
Complex num1(1, 2);Complex num2(3, 5);Complex result = num1 * num2;如果要实现 operator* 函数, 函数内需要创建一个Complex对象并返回方法一:在stack空间创建对象const Complex& operator*(const Complex& lhs, const Complex& rhs){ Comp
2017-09-19 12:06:10
411
原创 [effectiv c++]条款20:pass-by-reference-to-const 与 pass-by-value(解决slicing问题)
减少构造函数的开销避免slicing(对象切割)问题:当一个derived class对象以by value方式传递并被视为一个base class对象,实参会调用base class的构造函数,当对象调用一个虚函数时,实际调用的时base class的函数而不是derived class的函数。在C++编译器的底层,references往往以指针实现,pass-by-reference通常意味
2017-09-19 12:04:27
390
原创 [effectiv c++]条款11:operator=的自我赋值与异常处理
证同测试解决自我赋值的问题。 Test& Test::operator=(const Test& rhs){ if (this == &rhs) return *this; delete pb; pb = new Bitmap(*rhs.pb); return *this;}异常处理(如执行new时可用空间不足)可以用copy-and-swap技术解决,同时可以解
2017-09-19 12:02:56
360
原创 [effectiv c++]条款5:了解C++默默编写并调用哪些函数
条款5:了解C++默默编写并调用哪些函数对于一个empty class,如果你自己没声明,编译器就会为它声明(编译器版本的)一个copy构造函数,一个copy assignment操作符,一个析构函数,此外如果你没有声明任何构造函数,编译器会声明一个default构造函数。所有这些函数都是public且inline。 但惟有这些函数被调用,它们才会被编译器创建出来编译器拒绝生成copy assig
2017-09-10 10:20:41
209
原创 [effectiv c++]条款2:尽量以const,enum,inline替换#define(static,const定义式)
1、你所使用的名称可能并未进入记号表如 #define ASPECT_RATIO 1.653 中的记号名称ASPECT_RATIO可能由于预处理器的处理,而未被真实编译器看见,于是记号名称未能进入记号表。解决方法:用编译器替换预处理器 即用const替换宏(#define) const double AspectRatio = 1.653 作为一个语言常量,AspectRatio一定...
2017-09-07 10:07:51
214
原创 explicit 隐式转换与显示转换
explicit关键字:用于防止单参数构造函数的隐式转换功能(多参数构造函数不会执行隐式转换)class myDig { int value;public: explicit myDig(int n) { value = n; }}void doSomething(myDig num); //函数,接受一个myDig参数,函数体不重要,故省略...
2017-09-07 10:06:11
304
原创 字符串赋值给指针与数组的区别
代码int Test() { // Test1 char str1[] = "hello world"; char str2[] = "hello world"; if (str1 == str2) cout << "str1 equal str2" << endl; else cout << "str
2017-08-27 16:16:51
579
原创 c++笔记
最近重新温习了一遍c++,把一些原本掌握不牢的语法记了下来。引用int n = 4;int & setValue() {return n;}int main(){ setValue() = 40;//setValue的返回值是引用,是一个左值 cout << n << endl; return 0;} // 输出: 40...
2017-07-18 11:25:54
599
原创 子函数中的内存分配(二级指针的应用)
在子函数 func 中分配一段内存空间错误例子:#include using namespace std;bool func(char *p){ printf("*p = %d, p = %d, &p = %d\n", *p, p, &p); if (NULL == (p = (char*)malloc(sizeof(char)))) {
2017-04-19 15:54:11
602
原创 最小二乘法总结
概念最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x)。原理给定数据点pi(xi,yi),其中i=1,2,…,m。求近似曲线y= φ(x)。并且使得近似曲线与y=f(x)的偏差最小。近似曲线在点pi处的偏差δi= f(xi)-y,i=1,2,...,m。线性拟合:y = ax
2017-03-17 16:18:57
610
转载 一个类成员函数的局部静态变量问题
原文:http://www.cnblogs.com/Tour/p/4080212.html?utm_source=tuicool&utm_medium=referral 当时遇到的需求需要这样处理:调用某个类对象的某个成员函数时,第一次有具体意义的,其他时候都是保持不变的、无意义的。这个需求
2017-03-11 16:26:56
440
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人