
C/C++
文章平均质量分 86
普通网友
这个作者很懒,什么都没留下…
展开
-
struct 大小的计算
结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率。在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员按照其声明顺序在存储器中顺序存储。自然对齐是指按照结构体中成员size最大的对齐,在cl编译器下可以使用#pragma pack(n)来指定结构体的对齐方式。默认对齐方式在默认对齐方式下,结构体成员的内原创 2015-10-03 15:02:29 · 998 阅读 · 0 评论 -
C++ 面试(1)指针
指针是C++中一类颇具特色的数据类型,允许直接操作内存地址,实现内存的动态分配。指针问题通常包括指针常量,常量指针,数组指针,指针数组,函数指针,指针传值等。指针和引用的区别非空区别。在任何情况下都不能使用指向空值的引用。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如原创 2015-10-08 21:48:43 · 652 阅读 · 0 评论 -
VS中C++ 项目重命名
应该都有过这样的经历,在Visual studio中创建解决方案,添加几个项目进去,然后开始愉快的敲代码…。写代码正欢的时候,却总是感觉那里有些不舒服,一细看,这项目名称取的真心挫,修改个吧。直接右击项目名->重命名,修改一个让自己舒心的名称。然而,真的就这么简单么。打开项目所在文件夹,怎么文件夹名字还是原来的那个啊,对于有强迫症的人来说这是不能认的。改了!然而,重新打开解决方案却发现,修改名称的那原创 2016-10-08 23:05:50 · 4892 阅读 · 0 评论 -
模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式。使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了。偶然间看到分析Linux内核的循环缓冲队列kfifo的实现,确实极其巧妙。kfifo主要有以下特点:保证缓冲空间的大小为2的次幂,不是的向上取整为2的次幂。使用无符号整数保存输入(in)和输出(out)的位置,在输入输出时不对in原创 2016-11-16 17:02:15 · 2184 阅读 · 0 评论 -
C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段。并行是指两个或多个独立的操作同时进行。注意这里是同时进行,区别于并发,在一个时间段内执行多个操作。在单核时代,多个线程是并发的,在一个时间段内轮流执行;在多核时代,多个线程可以实现真正的并行,在多核上真正独立的并行执行。例如现在常见的4核4线程可以并行4个线程;4核8线程则使用了超线程技术,把一个物理核模拟为2个逻辑核心,原创 2016-12-05 17:12:33 · 958 阅读 · 0 评论 -
C++ 拷贝构造函数和赋值运算符
本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。最后,简单的分析了下深拷贝和浅拷贝的问题。拷贝构造函数和赋值运算符在默认情况下(用户没有定义,但是也没有显式的删除),编译器会自动的隐式生成一个拷贝构造函数和赋值运算符。但用户可以使用delete来指定不生成拷贝构造函数和赋值运算符,这样的对象就不能通过值传递,也不能进行赋值运算。class Pe原创 2016-12-07 16:38:20 · 462 阅读 · 0 评论