随笔分类 - c++基础原理
摘要:内核使用内存描述符结构体表示进程的地址空间,该结构体包含了和进程地址空间有关的全部信息。内存描述符由mm_struct结构体表示,定义在文件<linux/sched.h>中。进程地址空间由每个进程的线性地址区(vm_area_struct)组成。通过内核,进程可以给自己的地址空间动态的添加或减少线性
阅读全文
摘要:如果虚函数通过对象被调用,倒是可以inlined,但大部分虚函数调用动作是通过对象的指针或引用完成的,此类行为无法被inlined。inlined意味着编译期将调用端的调用动作被函数本体取代,若无法知道哪个函数该被调用时,编译器没法将该函数加以inlining。 (more effective C+
阅读全文
摘要:select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说
阅读全文
摘要:1. stack 中有 pop() 和 top() 方法,为什么不直接用 pop() 实现弹出和取值的功能? 如果 stack 中存放的是较大是内容时,比如 vector 类型,取值的时候就会发生拷贝,如果拷贝失败,这是, 假设有一个stack<vector>,vector是一个动态容器,当你拷贝一
阅读全文
摘要:转自http://blog.csdn.net/yanjun_1982/archive/2005/09/02/470405.aspx 这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。 重载是指不同的函数使
阅读全文
摘要:前言本文主要整理了C++11中std::move和std::forward的原理, 这对理解C++的移动拷贝有很重的意义。 一、左值和右值左值: 一般来说,能在内存中取得其地址, 即是左值。 右值:在内存在无取得其地址的, 即是右值。 note: 左值持久,右值暂短。 左值有持久的状态,一般是变量,
阅读全文
摘要:本文基本上涵盖了c++11的所有新特性,并有详细代码介绍其用法,对关键知识点做了深入分析,对重要的知识点我单独写了相关文章并附上了相关链接,我整理了完备的c++新特性脑图(由于图片太大,我没有放在文章里,同学可以在后台回复消息“新特性”,即可下载完整图片)。 重要特性: auto 左值右值 列表初始
阅读全文
摘要:理解auto类型推断 上一篇帖子中讲述了模板类型推断,我们知道auto的实现原理是基于模板类型推断的,回顾一下模板类型推断: template <typename T> void f(ParamType param); 使用下面的函数调用: f(expr); 我们看到模板类型推断过程涉及到了模板te
阅读全文
摘要:template <typename T> class SmartPointer { public: //构造函数 explicit SmartPointer(T* p=0): _ptr(p), _reference_count(new size_t){ if(p) *_reference_coun
阅读全文
摘要:新标准重新定义了lvalue和rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantic)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基础上提升代
阅读全文
摘要:今天的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogram
阅读全文
摘要:模板机制为C++提供了泛型编程的方式,在减少代码冗余的同时仍然可以提供类型安全。 特化必须在同一命名空间下进行,可以特化类模板也可以特化函数模板,但类模板可以偏特化和全特化,而函数模板只能全特化。 模板实例化时会优先匹配”模板参数”最相符的那个特化版本。 模板的声明 类模板和函数模板的声明方式是一样
阅读全文
摘要:相关博客http://blog.chinaunix.net/uid-24954950-id-2956476.html 相关博客http://blog.csdn.net/misiter/article/details/7514428 相关博客http://blog.chinaunix.net/uid-
阅读全文
摘要:今天听了公司内部的讲座,对于之前关于IO一些模模糊糊的地方有了一些新的感想以及体会,故此总结一下。 一、IO模型:Reactor和Proactor Reactor框架工作模式为:用户注册事件,而后Reactor框架监听该事件,当数据到达后,通知用户,而后用户自己完成事件处理。因此用户只需向React
阅读全文
摘要:概念 竞争条件 多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时许,称为竞争条件。 忙等待的互斥 几种实现互斥的方案: 屏蔽中断 1在单处理器系统中,最简单的方法是使每个进程在刚刚进入临界区后立即屏蔽所有中断,包括时钟中断。CPU 只有在发生中断的时候才会进行进程切换,这样在中断被屏蔽后
阅读全文
摘要:不讲语言特性,只从工程角度出发,个人觉得C++标准委员会在C++11中对多线程库的引入是有史以来做得最人道的一件事;今天我将就C++11多线程中的atomic原子操作展开讨论;比较互斥锁,自旋锁(spinlock),无锁编程的异同,并进行性能测试;最后会讨论一下内存序的问题;为了流畅阅读你最好先熟悉
阅读全文
摘要:一、概述 移动构造函数可以弥补拷贝构造函数的空缺。 移动语义,简单来说解决的是各种情形下对象的资源所有权转移的问题。而在C++11之前,移动语义的缺失是C++饱受诟病的问题之一。 举个栗子。 问题一:如何将大象放入冰箱?答案是众所周知的。首先你需要有一台特殊的冰箱,这台冰箱是为了装下大象而制造的。你
阅读全文
摘要:1 引言 众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下。SLAB是一种内存管理机制,其拥有较高的处理效率,同时也有效的避免内存碎片的产生,其核心思想是预分配。其按照SIZE对内存进行分类管理的,当申请一块大小为SIZE的内存时,分配器就从SIZE集合中分配一
阅读全文
摘要:参数依赖查找(Argument-dependent lookup),又称 ADL 或 Koenig 查找,是一组于函数调用表达式查找非限定函数名的规则,包含对重载运算符的隐式函数调用。在通常非限定名称查找所考虑的作用域和命名空间之外,还在其参数的命名空间中查找这些函数。 参数依赖查找使使用定义于不同
阅读全文
摘要:1 #include <stdlib.h> 2 #include <iostream> 3 #include <string.h> 4 5 using namespace std; 6 struct key 7 { 8 void *key; 9 int size; 10 }; 11 12 struc
阅读全文