博客园  :: 首页  :: 联系 :: 管理

随笔分类 -  Programming

Programming language/architecture/tips/...
摘要:【翻译】线程间伪共享的避免和识别 英文原文: Avoiding and Identifying False Sharing Among Threads. http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/ ... 阅读全文

posted @ 2013-09-30 19:19 Apprentice89 阅读(3104) 评论(1) 推荐(0)

摘要:C++通过引用传递数组数组形参可以声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参和实参类型的一部分(实参长度与形参长度不同时,编译报错)。void printValue(int (&a)[5]){...}int main(){int i=0;int j[2]={0,1};int k[5]={0,1,2,3,4};printValue(i);//编译报错printValue(j); //编译报错printValue(k); //编译OKreturn 0;}C++多维数组的传递C++中没有多维数组,多维数组实际 阅读全文

posted @ 2013-06-26 20:53 Apprentice89 阅读(430) 评论(1) 推荐(0)

摘要:l select是什么select是UNIX下一种IO多路转接(IO Multiplexing)的技术。select系统调用是用来让我们的程序监视多个文件描述符的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。l select用法int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);Ø fd_set定义如下:typedefstructfd_set { u_int fd_count; //fd_set中 阅读全文

posted @ 2013-05-09 18:54 Apprentice89 阅读(435) 评论(0) 推荐(0)

摘要:l epoll是什么?epoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,都是I/O多路复用(IO multiplexing)技术。Linux下设计并发网络程序,常用的模型有:Ø Apache模型(Process Per Connection,简称PPC)Ø TPC(Thread PerConnection)模型Ø select模型和poll模型。Ø epoll模型l 常用模型的缺点n PPC/TPC模型这两种模型思想类似,就是让每一个到来的连接都有一个进程/线程来服务。这种模 阅读全文

posted @ 2013-05-06 17:15 Apprentice89 阅读(2523) 评论(0) 推荐(1)

摘要:Chapter 7 站在对象模型的尖端这一章没怎么看到有意思的(以后再补)。TemplateTemplate的实例化行为:Point<float> p; 会发生实例化。Point<float> *pp; 不会发生实例化(指针确定占4B,类型只影响如何解释这块内存)。Point<float> &r; 会发生实例化(引用不能指向no object)。成员函数的只在被使用的时候才实例化(编译或链接时)。异常处理执行期类型识别 Runtime Type Identification RTTI 阅读全文

posted @ 2013-03-27 16:47 Apprentice89 阅读(240) 评论(0) 推荐(0)

摘要:Chapter 6 执行期语义 Runtime Semantics对象的构造和析构局部对象:{Point p;// p.Point::Point();...//p.Point::~Point();}对于switch和if-else等控制流,情况相对复杂一些。全局对象:C++保证全局对象在main函数第一次使用全局变量前将全局变量初始化好。在main结束前销毁。局部静态变量:局部静态变量的构造函数和析构函数都只能执行一次。编译器会设立一个临时变量,初始为0,当局部静态变量初始化后,该临时变量指向局部静态变量的地址。于是构造和析构都需要条件执行(该临时变量作为条件)。数组:new和delete运算 阅读全文

posted @ 2013-03-26 19:45 Apprentice89 阅读(271) 评论(0) 推荐(0)

摘要:Chapter 5 构造析构拷贝语义学纯虚函数:父类的纯虚函数仍然可以被定义并在子类中以静态方式调用。对于pure virtual destructor,类的设计者必须定义它,因为每个子类析构时会以静态方式调用其每一个virtual base class和上一层的base class的destructor(如果父类本身不为自己定义析构函数,链接时就找不到这个父类的析构实现,链接错误)。总之,不要把virtual destructor声明为pure。继承体系下的对象构造T object;这样的代码在T的构造函数调用时,伴随着的动作有什么:1. 记录在member init list中的data 阅读全文

posted @ 2013-03-26 17:06 Apprentice89 阅读(338) 评论(0) 推荐(0)

摘要:Chapter 4 Function语义学 The Semantics of FunctionMember的各种调用方式:nonstatic member functions:nonstatic member functions会被转化为nonmember形式。传入this指针,function中对nonstatic data member的存取都使用this来访问。virtual member function:如果normalize()是virtual member function,则ptr-> normalize()会变成(*ptr->vptr[1])(ptr); //1为 阅读全文

posted @ 2013-03-25 22:01 Apprentice89 阅读(345) 评论(0) 推荐(0)

摘要:Chapter 3 Data语义学 The Semantics of DataData Member的绑定:主要是作用域的规定Data Member的布局类的static data member会放在程序的数据段(data segment)。不同的access section的数据们放置没有强制的前后关系。vptr的放置也没有强制规定。Data Member的存取static data member的存取:由于static data member放在程序的数据段,访问时用唯一的地址即可。如果两个不同的class有同名的static data member,则这两个同名的member会被name 阅读全文

posted @ 2013-03-25 20:05 Apprentice89 阅读(501) 评论(0) 推荐(0)

摘要:Chapter 2 构造函数语义学关于C++,最常听到的一个抱怨就是:编译器背着程序员干了太多的事情。默认构造函数 default constructor如果没有程序员定义的构造函数,则会有一个default constructor被隐式(implicity)声明出来。一个被隐式声明的default ctor有时候会是一个trivial的ctor(完全什么也不做,连成员变量也不初始化,等于没有这个ctor,只是概念上有而已)。在以下四种情况下,这个隐式声明的default ctor会是nontrivial ctor。情况1:这个类含有带有default ctor的成员。例如:classFoo 阅读全文

posted @ 2013-03-21 15:23 Apprentice89 阅读(628) 评论(0) 推荐(0)

摘要:Chapter 1 关于对象C++的对象:C++的class ADT相比C struct在布局上成本的额外负担是由virtual引起的:virtual function(用于支持动态绑定),virtual base class(用于实现“多次出现在集成体系中的base class,有一个单一而被共享的实例”)。C++中,有两种class data member:static和nonstatic,三种class function member:static, nonstatic, virtual。classPoint {public: Point(float xval); virtual ~Po 阅读全文

posted @ 2013-03-21 15:21 Apprentice89 阅读(1479) 评论(0) 推荐(0)

摘要:C++左值和右值 左值和右值是针对表达式而言的,一个表达式要么是左值,要么是右值。 左值和右值的判定:如果一个语句结束的时候,该表达式代表的对象立刻被销毁,则为左值,否则为右值。 也就是说,右值代表的是临时对象或者字面值,而左值则不是临时对象。于是另一种判定方法是:具名的表达式意味着是左值,非具名的则为右值(非具名左值引用是个例外,它是左值)。 非具名左值的例子: 1: ... 阅读全文

posted @ 2013-03-14 22:04 Apprentice89 阅读(251) 评论(0) 推荐(0)