03 2017 档案

摘要:互斥锁: 假设我们要在多线程中实现背景图片的控制: 但是上面这些会遇到两个问题: 如果 new Image(imgSrc)发生了异常,那么unlock就不会被执行,会被一直锁住 发生上面异常,imageChanges也被累加,但实际上新的图片没有被安装 对于第一个问题: 被及时释放的互斥锁: sha 阅读全文
posted @ 2017-03-27 21:26 Przz 阅读(439) 评论(0) 推荐(0)
摘要:注意类型转换: C++提供了四种新式类型转换: static_cast 和 旧式转换 在编程中我们经常使用强制类型转换,尤其是在竞赛中int不够的时候 static_cast和它差不多,只是能够让人们 更清晰地识别出它是一个强制类型转换 。 类中的类型转换: 这段代码中,使用了转型动作,我们所预期的 阅读全文
posted @ 2017-03-27 17:44 Przz 阅读(149) 评论(0) 推荐(0)
摘要:http是一个面向事务的应用层协议。 http规定http客户和服务器之间的每次交互都由一个ASCII码串和一个类似通用英特尔邮件扩充。 访问一个网站: 当点击一个链接时,会有一个URL(http://www.xxxxx.com/xxxx/xx.html) 1.浏览器分析URL 2.浏览器DNS请求 阅读全文
posted @ 2017-03-20 21:44 Przz 阅读(431) 评论(0) 推荐(0)
摘要:转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为 阅读全文
posted @ 2017-03-20 21:40 Przz 阅读(227) 评论(0) 推荐(0)
摘要:以独立的语句将newed对象置入智能指针: 我们在这使用对象管理式资源,却可能造成资源的泄露。 上面主要有3三件事情需要完成: priority() new Widget share_ptr的构造函数 但是在C++中无法确定他们的调用顺序,于是可能出现下面这种: new Widget priorit 阅读全文
posted @ 2017-03-20 19:06 Przz 阅读(261) 评论(0) 推荐(0)
摘要:函数对象: 通常我们可以将函数作为参数传入另一个参数,比如qsort中传递函数指针。 STL函数对象则是函数指针的一种抽象形式。 传递方式: 由于标准库函数中,函数指针的传递是按照值传递的;所以函数对象在函数之间的传递也是 值传递 。 for_each示例: 函数对象示例: 合理设计: 因为函数对象 阅读全文
posted @ 2017-03-20 19:01 Przz 阅读(840) 评论(0) 推荐(0)
摘要:函数子可匹接: 经常我们会同not1对函数返回进行转义: 但实际上isInteresting作为一个基本的函数指针,缺少not1所需要的函数定义。 unary_function和binary_function: 比较简便的方法就是从STL中继承上面这两个基类。所以函数子经常会出现下面这种代码 继承模 阅读全文
posted @ 2017-03-20 19:01 Przz 阅读(193) 评论(0) 推荐(0)
摘要:transform: 通过transform函数我们可以将一个仿函数作用域[begin,last)的每个元素身上,然后将结果保存到目标区间。 上述代码会将value中的元素调用transmogrify,然后通过赋值保存到results中。 但是这会出现一些问题, 因为results中没有对象,怎么可 阅读全文
posted @ 2017-03-20 18:59 Przz 阅读(214) 评论(0) 推荐(0)
摘要:operator[] 和 insert: map的[]操作和其他容器和内置[]没有关系 如果我们通过[]向map中插入or更新值,需要考虑一些东西 1.键已经存在,那么直接进行修改即可 2.键不存在,那么需要 值的默认构造创建一个新的对象,然后返回引用进行赋值 如果使用 operator[] 插入值 阅读全文
posted @ 2017-03-20 18:56 Przz 阅读(196) 评论(0) 推荐(0)
摘要:可重复插入?: 第二次调用insert,集合回去确认10是否已经存在。因为我们代入的比较函数是 = 祖父节点,所有当前值有可能与祖父值相同。 如果是右儿子,那么 =父亲节点 对于可能相等的情况判断一下 于是会先判断 (10b 10a)。如果两个都满足的话,两个点是不相同的。 但是判断函数换成了 le 阅读全文
posted @ 2017-03-20 18:55 Przz 阅读(410) 评论(0) 推荐(0)
摘要:remove: remove不是真正的删除,删除后数量并没有变化。 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器。 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用 需要保留的数据覆盖掉前面需要删除的数据 。然后返回一个需要被删除开始位置的迭代器。 所以通常需要结合 阅读全文
posted @ 2017-03-20 18:52 Przz 阅读(247) 评论(0) 推荐(0)
摘要:reserve: 强迫容器将它的容量变成n 可以避免不必要的重新分配 如果n大于当前容量,那么正常。 如果n小于当前容量,vector会忽略,string则是减小为 max(size(),n)。 如果我们需要大量的向容器中添加数据: for(int i = 0 ;i 阅读全文
posted @ 2017-03-20 18:50 Przz 阅读(294) 评论(0) 推荐(0)
摘要:allocator: 通常c++内存配置和释放操作是这样的: new算式主要有三个阶段: 调用::operator new配置内存 调用Fo::Fo()构造函数 返回一个对象的指针 allocator为了精密分工将步骤分开 1.allocate()和deallocatr()负责内存的配置和释放 2. 阅读全文
posted @ 2017-03-20 18:48 Przz 阅读(242) 评论(0) 推荐(0)
摘要:为什么要使用区间函数: v.insert(v.begin(),data,data+num); //显示循环: for(int i = 0 ;i 阅读全文
posted @ 2017-03-20 18:44 Przz 阅读(195) 评论(0) 推荐(0)
摘要:通常下面代码: 我们会觉得它们是是等价的。 为何empty()比较好? 主要是他们之间的效率有一定差距: empty对任意的容器都是常数时间 对于有点list实现,size需要线性时间 而size()则是通过区间遍历来数一数。 为何size()不能是常数的? 如果size()想在常数时间内实现,那么 阅读全文
posted @ 2017-03-20 18:42 Przz 阅读(777) 评论(0) 推荐(0)
摘要:有时候我们希望知道迭代器所指的元素类型。 以迭代器所指声明对象: 可以通过func_impl的参数类型推导 但是推导机制只适用于参数,无法推导返回类型 声明内嵌型 特例化实现 如果T不是一个迭代器对象,而是一个原生指针,那么内置类型不适合 可以考虑指针特例化实现 traits萃取机 阅读全文
posted @ 2017-03-20 18:38 Przz 阅读(264) 评论(0) 推荐(0)
摘要:IO复用:使得程序能同时监听多个文件描述符 select: select在一段指定的时间内,监听用户感兴趣的文件描述符的 读、写、异常事件。 当调用了select之后整个进程就会被block。同时kernel会监听select负责的所有的socket.如果 相关的时间就绪就会返回。 但是select 阅读全文
posted @ 2017-03-20 18:11 Przz 阅读(199) 评论(0) 推荐(0)
摘要:位置无关代码: 起因: 当程序在多个不空地址空间运行时,操作系统通常会将程序加载到各个地址空间的相同位置, 这样可以让链接期在程序加载时不用再重定位,将地址绑定到固定位置。 对于动态库而言,如果如果我们不将动态库编译成PIC的也就是意味着loader一定要把动态库加载到某个特定 的地址(该地址编译的 阅读全文
posted @ 2017-03-05 16:42 Przz 阅读(4458) 评论(0) 推荐(0)
摘要:转载:http://blog.chinaunix.net/uid-20761674-id-3072683.html 一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念 阅读全文
posted @ 2017-03-04 16:35 Przz 阅读(228) 评论(0) 推荐(0)
摘要:本来最初是想知道共享库是怎么实现一个副本就行的,顺便拓展下。 虚拟内存: 当运行一个进程时,它需要的内存有可能大系统内存容量。通常一个进程会有4G独立的空间,那么n个进程就是 n 4G的内存,很明显系统内存不够。 每个进程的4G只是虚拟内存,每次访问的时候都要转变成物理地址。 虚拟内存主要是通过请求 阅读全文
posted @ 2017-03-04 16:31 Przz 阅读(772) 评论(0) 推荐(0)
摘要:主要任务: 1.符号解析 在声明变量和函数之后,所有的符号声明都被保存到符号表。 而符号解析阶段会给每个符号一个定义。 2.重定位: 把每个符号的定义与一个内存位置关联起来,然后修改所有对这些符号的引用,让他们 指向内存位置。 符号解析: 会将符号引用和可重定位目标文件的符号表中的确定符号定义关联起 阅读全文
posted @ 2017-03-04 16:26 Przz 阅读(602) 评论(0) 推荐(0)
摘要:代码移动: 如果一个表达式总是得到同样的结果,最好把它移动到循环外面,这样只需要计算一次。编译器有时候可以自动完成,比如说使用 O1 优化。一个例子: vmovesd (%rbx),%xmm(); //read from p vmulsd (%rdx),%xmm(),%xmm(); //mul by 阅读全文
posted @ 2017-03-04 16:24 Przz 阅读(766) 评论(0) 推荐(0)
摘要:程序编译: 1.预处理阶段: 1.文件包含:将 include扩展成文件正文 2.条件编译:根据 if和 ifdef将程序的某部分排除或者包含 3.宏展开:将出现宏引用的地方展开成相应的宏 2.编译阶段: 检查代码的规范性、是否有语法错误等,然后将其转换成低级机器语言。(C会转换成汇编语言) 3.汇 阅读全文
posted @ 2017-03-04 16:22 Przz 阅读(481) 评论(0) 推荐(0)
摘要:一 一个问题 原文链接:http://www.cnblogs.com/yangecnu/p/4196026.html#undefined 在StackOverflow上有这么一个问题 Why is processing a sorted array faster than an unsorted a 阅读全文
posted @ 2017-03-02 20:43 Przz 阅读(1051) 评论(2) 推荐(1)