随笔分类 - C++/C
关于C++/C的一些东东
摘要:C++0x标准出来很长时间了,引入了很多牛逼的特性[1]。其中一个便是右值引用,Thomas Becker的文章[2]很全面的介绍了这个特性,读后有如醍醐灌顶,翻译在此以便深入理解。 目录 概述 右值引用是由C++0x标准引入c++的一个令人难以捉摸的特性。 右值引用恶心的地方在于,当你看到它的时候
阅读全文
摘要:(1) 在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用。 1 int ival = 1092; 2 int &re = ival; //ok 3 int &re2 = &ival; //错误
阅读全文
摘要:最近在测试种发现程序里调用fsync刷文件到磁盘时,开销只有几百微秒,于是对fsync相关机制进行了一番调查。 磁盘(或RAID卡)自身通常会有硬件缓存机制,对于写操作,有write back和write through两种机制,前者将数据写至缓存就会返回,而后者则会将数据写到磁盘介质上。当使用wr
阅读全文
摘要:传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到
阅读全文
摘要:在调用socket读写函数read(),write()时,都会有返回值。如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲区读取或者写入的字节数目 2当read()函数返回值为0时,表示对端已经关闭了 socket,这时候
阅读全文
摘要:优先级操作符描述例子结合性 1 () [] -> . :: ++ -- 调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用域操作符 后置自增操作符 后置自减操作符 (a + b) / 4; array[4] = 2; ptr->age
阅读全文
摘要:这个warning是由于初始化顺序引起的, // 会出现warning 的代码! class cInit { public: cInit(std::string str, int a) : str_(str), a_(a) { } private: int a_; std::string str_;
阅读全文
摘要:c++11中有一个区域锁lock_guard,还有第二个区域锁unique_lock。 区域锁lock_guard使用起来比较简单,除了构造函数外没有其他member function,在整个区域都有效。 区域锁unique_guard除了lock_guard的功能外,提供了更多的member_fu
阅读全文
摘要:__sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetch_and_add,顾名思义,先fetch,然后自加,返回的是自加以前的值。以count = 4为例,调用__sync_fetch_and_add(&count,1),
阅读全文
摘要:在Linux中编程的时候 有时候 try catch 可能满足不了我们的需求。因为碰到类似数组越界 ,非法内存访问之类的 ,这样的错误无法捕获。下面我们介绍一种使用捕获信号实现的异常 用来保证诸如段错误之类的错误发生时程序不会崩溃,而是跳过代码继续执行。首先我们来看看发生段错误之后系统的处理。 发生
阅读全文
摘要:memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const
阅读全文
摘要:先看段代码: 这里的d是一个char*的内存buffer,s是一个256长度的bool数组。上段代码逻辑是,s已进行过初始化,其作用是过滤字节,有些字节对应true,有些字节对应false。明显,d[i]有256种可能。上面的逻辑正确么? 上面的代码其实就是我项目里的一段代码,看似没有问题,实际上有
阅读全文
摘要:switch(c) { case 0x01: int temp = a + b; .... break; case 0x02: break; default:break; } 此时会报如题所示错误 原因是因为C和C++中,一个变量的生命期(作用域)是这么规定的,中文还不好解释,英文原文是这样的:Th
阅读全文
摘要:在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream的内容: 1.打开文件 在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关
阅读全文
摘要:编程中经常需要在程序中使用shell命令来简化程序,这里记录一下。 1. C++ 执行shell命令 1 #include <iostream> 2 #include <string> 3 #include <stdio.h> 4 5 int exec_cmd(std::string cmd, st
阅读全文
摘要:提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函
阅读全文
摘要:项目里遇到一个小需求,存储少量16进制串到一个容器中,并可对其进行搜索。 一开始我使用了字典树来存储,后来尝试写了个变形树,减少内存消耗和提高搜索效率。 基础结构见下图: 简单解释下,就是图中长方形是字符串,箭头为指针。当存储第一条字符串时,容器中存下一个字符串。当存储第二条时,与第一条进行比较,遇
阅读全文
摘要:Linux下 pthread mutex * PTHREAD_MUTEX_TIMED_NP,这是缺省值,也就是普通锁。当一个线程加锁以后,其余请求锁的线程将形成一个等待队列,并在解锁后按优先级获得锁。这种锁策略保证了资源分配的公平性。 * PTHREAD_MUTEX_RECURSIVE_NP,嵌套锁
阅读全文
摘要:Linux操作系统下的多线程编程详细解析 条件变量 1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr);
阅读全文
摘要:题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。注意:一定是子线程先执行,主线程再执行。 这里用的是线程的条件变量,使用条件变量与只是用线互斥程锁的不同在于:条件变量可以控制一个线程等另一个线程执
阅读全文

浙公网安备 33010602011771号