
C/C++
文章平均质量分 71
SIGXXL
这个作者很懒,什么都没留下…
展开
-
浅谈内存分析
(一)先解释一下静态内存分析与动态内存分析 下面以C++为例解释:程序中用于存储数据的变量和数组等实体在使用前都必须通过说明语句进行定义。C++编译器将根据这额说明语句了解他们所需存储空间 的大小,并预先为其分配适当的内存空间。也就是说,这些变量或数组在内存中所占据的空间大小必须在编译时(即程序运行前)确定下来的,这种内存分配方式称 为“静态存储分配”原创 2012-12-10 23:20:56 · 625 阅读 · 0 评论 -
怎样加快C++代码的编译速度
完美世界 笔试题问到了“如何优化C++编译时间?”C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。本文介绍了加快C++编译速度的方法,一起来看。C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,原创 2013-11-04 14:53:10 · 1769 阅读 · 0 评论 -
std::string的Copy-on-Write:不如想象中美好
转载地址:Copy-on-write(以下简称COW)是一种很重要的优化手段。它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源。COW技术的一个经典应用在于Linux内核在进程fork时对进程地址空间的处理。由于fork产生的子进程需要一份和父进程内容相同但完全独立的地址空间,一种做法是将父进程的地址空间转载 2014-04-08 11:56:17 · 1392 阅读 · 0 评论 -
伙伴分配器的一个极简实现
转自酷壳:http://coolshell.cn/articles/10427.html提起buddy system相信很多人不会陌生,它是一种经典的内存分配算法,大名鼎鼎的Linux底层的内存管理用的就是它。这里不探讨内核这么复杂实现,而仅仅是将该算法抽象提取出来,同时给出一份及其简洁的源码实现,以便定制扩展。伙伴分配的实质就是一种特殊的“分离适配”,即将内存按2的幂进行划分原创 2013-10-23 16:14:20 · 1400 阅读 · 0 评论 -
读写锁的性能问题及替代方案
这两天看了一些资料,谈到了读写锁的性能问题,并建议不要使用读写锁,而采取其他方案原创 2014-04-13 14:42:10 · 9465 阅读 · 2 评论 -
将数组作为参数的单参数函数
一切尽在代码中:/* * ===================================================================================== * * Filename: 1.cc * * Description: 一般向数组传递参数都是传数组名(实际上在函数参数中被转换为指向第一个 *原创 2013-04-15 15:28:39 · 1005 阅读 · 0 评论 -
Linux C++线程池
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服务器转载 2013-08-30 20:30:46 · 1126 阅读 · 0 评论 -
C++引用的底层实现&引用解绑定
SB都知道引用是对象的别名,但是你要知道引用到底是什么,从底层实现角度来说,引用其实是对指针的封装。如:int a = 8;int &b = a;不管我们怎么用变量b,编译器好像进行了这样一种操作:它在b之前加上一个*,即:b = 4; 实际上类似于*b = 4;为了验证引用就是通过指针实现,下面通过一个实例来演示。注:编译器用的是G++。VS编译器打印原创 2013-04-15 14:22:43 · 1343 阅读 · 0 评论 -
C++中接口与实现分离
参考《Effective C++》中条款31:将文件的编译依存关系降至最低C++实现接口与实现分离可以有多种方式,比如利用虚函数,来实现运行时的动态绑定,本文采用另一种方法,即代理模式,同时解决了文件间编译依赖关系的问题。第一个例子没有实现接口与实现分离,作为一个反例,文件的依赖关系如下:Name.h:定义了类NameName.cc:定义了类Name中的方法GetName(原创 2013-05-13 20:53:38 · 1280 阅读 · 0 评论 -
用汇编解释左值,右值,临时变量和引用
左值,LValue:Location Value,并非Left Value。Location是指在内存中能够找到该变量的地址,即内存中一定有一个地方,存放了该变量。右值,RValue:Read Value,并非Right Value。这种类型的变量是只读的,那是不是在内存中就不存在 存放该变量的地方呢?请看下面的程序:/* * ==========================原创 2013-05-08 16:50:25 · 2160 阅读 · 0 评论 -
结构体对齐的具体含义(#pragma pack)
############################################################################################## 转载的第一篇########################################################################################转载 2013-05-04 10:43:44 · 897 阅读 · 0 评论 -
一个诡异的问题,【已解决】
#include #include using namespace std;class A{ public: int a; char c1; };class B : public A{ char c2;};class C : public B{ char c3;};int main(){ cout << sizeof(A) << " "原创 2013-04-09 11:11:22 · 928 阅读 · 0 评论 -
函数的声明与定义(以前没注意过!!)
直接上程序,共两个源文件1.c:#includevoid func1(){ printf("func in 1.c\n");}main.c:void main(){ int func1(char); func1(12);}在Linux下编译:cc main.c 1.c没有错误,运行结果为:func in 1.c在VS下运行结果相同。原创 2013-02-23 19:56:54 · 589 阅读 · 0 评论 -
gcc和g++的区别
我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,转载 2013-01-09 21:47:29 · 641 阅读 · 0 评论 -
placement new
placement new 在一块已分配内存上创建对象placement new 是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下: void *operator new( size_t, void *p ) throw() { return原创 2012-12-10 23:21:17 · 625 阅读 · 0 评论 -
编程中的命名设计那点事(转)
博客转载的文章太多了,其实也想多弄点原创,无奈技术太水。看到好文又想记录转载 2014-04-12 18:56:26 · 844 阅读 · 0 评论