`
文章列表
  #define list_entry(ptr, type, member) \        ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))       ptr是指向list_head类型链表的指针,type为一个结构,而member为结构type中的一个域,类型为list_head,这个宏返回指向type结构的指针。在内核代码中大量引用了这个宏,因此,搞清楚这个宏的含义和用法非常重要。     设有如下结构体定义: typedef struct xxx {      …… ...
  概述       在很多情况下,尤其是读别人所写代码的时候,对 C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个 ...
#include <iostream> #include <list> template <typename T> class CCustomerList { public: void push(T item) { m_customer.push_back(item); } void show_item() { CCIterator it = m_customer.begin(); while(it != m_customer.end()) { std::cout<<(*it)&l ...

C++中三种new的用法

    博客分类:
  • c++
 
我评价自己的C++水平还未入门的确不够准确,应该是远远未入门。 感叹自己看书的时候如此粗心,C++Coder最基本的placement new的知识,今天才明白。   如何在new一个对象的时候,使对象的空间并不在堆上分配,而是由使用者传入一个缓冲区给对象使用,且编译期会自动调用对象的构造函数?   new这个C++头文件中(注意,是new,不是new.h),定义了一个全局的重载了的new操作符,可以达到上述的效果。看看我写的测试代码: //--------------------------------------------------------------------- ...
 作者:Andrei Alexandrescu and Petru Marginean 原文地址:http://www.ddj.com/cpp/184403758 翻译,裁剪,修改:purewinter 转:http://blog.csdn.net/purewinter/article/details/1860875 注:裁剪修改只是为了让更多csdn上的读者不会因为此文太长而放弃阅读。。。 注2:Loki::ScopeGuard不仅对通常意义的异常有用,对于所有可以使用RAII的地方均有用。包括new出来的内存空间的管理,FILE或CFile之类的文件句柄等。 第一次翻译, ...

C++的make_pair函数

    博客分类:
  • c++
 
Pairs   C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象  class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/va lue)的成对元素。  pair被定义为struct,因此可直接存取pair中的个别值. 两个pairs互相比较时, 第一个元素正具有较高的优先级.  例:  namespace std{  template <class T1, class T2>  bool operator< (const pair<T1, ...
FOUND_ROWS() 函数 ,可以在调用包含LIMIT的SQL查询中,获得总共符合条件的记录数。这种方法比以相同的条件调用两次SQL语句要快一些。这个功能在进行分页显示的时候特别有用。以前居然都没有发现这个函数,而每次都调用两次查询。 FOUND_ROWS() 函数的具体用法: 它需要在前面的SELECT语句中打开SQL_CALC_FOUND_ROWS选项。如: mysql>  SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS ...
刚才查了下last_insert_id()相关资料,找到几篇不错的文章,保存下来,免得下次忘了又去找。 ################################# MySQL数据表结构中,一般情况下,都会定义一个具有‘AUTO_INCREMENT’扩展属性的‘ID’字段,以确保数据表的每一条记录都可以用这个ID唯一确定; 随着数据的不断扩张,为了提高数据库查询性能,降低查询热点,一般都会把一张表按照一定的规则分成多张数据表,即常说的分表; 分表除了表名的索引不同之外,表结构都是一样的,如果各表的‘ID’字段仍采用‘AUTO_INCREMENT’的方式的话,ID就不能唯确定一条记录 ...
相关文章见: http://dev.mysql.com/doc/refman/5.0/en/innodb-record-level-locks.html http://hi.baidu.com/fishhust/blog/item/c4900b8bff4a2e1bc8fc7a81.html http://dev.mysql.com/doc/refman/5.0/en/innodb-next-key-locking.html 对文章的总结如下: (1)记录锁:在行相应的索引记录上的锁 (2)gap锁:是在索引记录间歇上的锁 (3)next-key锁: ...
案例描述      在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志。      两个sql语句如下:      (1)insert into backup_table select * from source_table (2)DELETE FROM source_table WHERE Id>5 AND titleWeight<32768 AND joinTime<’$daysago_1week’  teamUser表的表结构如下: PRIMARY KEY  (`uid`,`Id ...

MySQL连接超时

  在负载较重的MySQL服务器上,有时你偶尔会看到一些连接超时的错误,诸如: Can’t connect to MySQL server on ‘mydb’(110)。如果当时你有多个连接请求,你会发现其它连接却没问题。这类问题开始时很不显眼,且长时间来看几乎可以忽略不计(注:次数不 多),类似于百万分之一的发生率,但是在服务器负载不断加重时,可能出现的频率将有所上升。 如果你对连接进行计时你会发现,连接一般都接近3-9秒。这个时长有时也很诡异,多年前我就曾遇到过一次,当时数据库请求连接被重置,SYN包一直被丢 弃。3秒就有一个SYN包被抛弃,9秒有两被抛弃。如果你也 ...

C++的explicit构造函数

    博客分类:
  • c++
 
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); // 用C风格的字符串p作为初始化值 //… } String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”);   但是有的时候可能会不需要这种隐式转换,如下: class String {        String ( int n ); //本意是预先分配n个字节给字符串 String ( const ch ...
     许多书籍提到过内存碎片,也看到一些方法防治内存碎片。一直以来都以为频繁的分配释放内存会导致系统内存碎片过多(虽然这个想法并没有错到离谱)。后来看 过计算机程序设计艺术上面关于伙伴系统的介绍,一般操作系统都采用此种方法来管理内存。频繁分配释放内存确实会导致一些系统负担,但分配的内存释放及时, 内存管理系统将能够急时合并相邻空闲内存块,得到更大的空闲内存。这样并不会导致内存碎片的出现。即使相邻空间不空闲,这样产生的碎片还是比较少的   今天突然醒悟内存碎片的出现主要跟分配有关,特别是分配小而且生命周期很长的内存块时,才容易导致内存碎片的出现。对于伙伴系统,假设有16byte ...
Linux程序设计中,创建线程时调用pthread_create()函数,该函数原型如下: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); 其 中第二个参数attr为线程属性指针,一般情况下,我们创建线程时,若对线程属性没有特殊要求,都将此参数设为NULL,这也就使用了线程的默认属性- 非分离状态(joinable,或称可接合状态),之后,主线程必须在适当的时候调用pthread_join(),来接合(jo ...
用Explain分析SQL语句的时候,经常发现有的语句在Extra列会出现Using filesort,根据mysql官方文档对他的描述: 引用 MySQL must do an extra pass to find out how to retrieve the rows in sorted order. The sort is done by going through all rows according to the join type and storing the sort key and pointer to the row for all rows that mat ...
Global site tag (gtag.js) - Google Analytics