Posted in 生活点滴 on 十 24th, 2007
今年腾讯来武汉很早,也很巧,恰恰是我生日那天晚上在计算机院办二楼做的宣讲会。当时king参与了Q&A环节,帮我争取到了一个可爱的小公仔。呵呵,就算是腾讯和king一起送给我的一份特别生日礼物把!小公仔被放在了小家我们每天出入都会看到的地方,于是我与腾讯的这段“情缘”也就慢慢的拉开了帷幕……
宣讲结束后接来是十一放假,假期过了没有过多久,就受到了腾讯给我发来的笔试通知。说到笔试,还算有些起伏。早上开机看到的邮件,说晚上19点华科笔试,当时还在想:晚上笔试呀,哦……那还早呢。哪里知道等我慢慢腾腾的磨到实验室后,同学都说腾讯通知的时间有问题,于是我再去网上查准考证,上面居然写着早上9点考试……晕,当时是8:50!怎么也不可能在9点到华科。极其郁闷,想到如果就这样错过了考试就太可惜了……还好我们一拨人很积极的拼车打的去了华科,半路受到短信通知说是时间改在了早上11点,还好送了口气。当我坐在考场开始答题的时候,才开始发现自己好饿,没办法,只能坚持了。当时心里压力还是有一些的,过不了笔试,就和下轮面试无缘了。(除了霸王面,呵呵,不过本人脸皮很薄,没那勇气)经历了一番波折,心里久久不能平静,导致一开始的考试很不在状态。做到最后还剩两个大题的时候,看了看手机,差点没晕过去,居然还剩25分钟!!太久没有考试了,时间感太差了,2个大题!我当时感觉笔试要挂了……
Read Full Post »
Posted in C&C++, 计算机技术 on 十 5th, 2007
这段时间一直在复习准备笔试,好久都没有来ksarea了。今天上来一看,心中感动不已,原来king一直都在不断的更新我们的空间……哎,自己要好好的反省一下了,呵呵。以前一直都没有好好的学习C++里面的一些细节知识点,今天看了看const限定符,所以也在这里写几句,算是对ksarea一点小小的弥补吧
const限定符把一个对象转换成一个常量,如 const int bufSize=512; 申明bufSize的时候,如果不将它初始化,那么编译器会报错:const object must be initialized if not extern。因为bufSize被const限定符限制,如果不在申明bufSize的时候给它赋值,就不能再给它赋值(因为常量在定义之后就不能被修改),它就没有任何意义了。
简单的介绍了一下const的含义之后,下面将详细的讨论一下const变量的作用域、const指针、指向const对象的指针、const引用的相关用法。
1.const变量作用域
在全局作用域声明的普通全局变量在整个程序中都可以被访问,如:
//file_1.cpp
int counter;
//file_2.cpp
extern int counter; // use counter from file_1.cpp
++counter; // increments counter defined in file_1.cpp
但是在全局作用域声明的const变量却是定义该对象文件的局部变量,此变量只存在与这个文件中,不能被其他文件访问,有些类似于使用static修饰的全局变量。但是如果在其前面再加上extern,那么就意味着可以在其他文件中共享。如:
//file_1.cpp
extern const int counter=100;
//file_2.cpp
extern const int counter; // use counter from file_1.cpp
++counter; // increments counter defined in file_1.cpp
(const变量在默认的情况下是定义该变量文件的局部变量,之所以要这样定于语法,是因为允许const变量出现在头文件中,当一个头文件中定义了一个const变量,而它又是局部变量,那么在任何一个包含这个头文件的源文件都会有属于自己的const变量。而一般的非const变量则被默认为extern)
Read Full Post »
Posted in C&C++, 计算机技术 on 十 4th, 2007
有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看:
struct T
{
char ch;
int i ;
};
使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VC6中测试了下,答案确实8个字节。哎,反正受伤的总是我,我已经有点麻木了,还是老老实实的接受吧!为什么答案和自己想象的有出入呢?这里将引入内存对齐这个概念。
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值是大于1的整数,我们就称类型S的对齐要求比T强(严格),而称T比S弱(宽松)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的时候都从某个8倍数的地址开始,一次读出或写入8个字节的数据,假如软件能保证double类型的数据都从8倍数地址开始,那么读或写一个double类型数据就只需要一次内存操作。否则,我们就可能需要两次内存操作才能完成这个动作,因为数据或许恰好横跨在两个符合对齐要求的8字节内存块上。某些处理器在数据不满足对齐要求的情况下可能会出错,但是Intel的IA32架构的处理器则不管数据是否对齐都能正确工作。不过Intel奉劝大家,如果想提升性能,那么所有的程序数据都应该尽可能地对齐。
ANSI C标准中并没有规定,相邻声明的变量在内存中一定要相邻。为了程序的高效性,内存对齐问题由编译器自行灵活处理,这样导致相邻的变量之间可能会有一些填充字节。对于基本数据类型(int char),他们占用的内存空间在一个确定硬件系统下有个确定的值,所以,接下来我们只是考虑结构体成员内存分配情况。
Read Full Post »