- 博客(28)
- 资源 (4)
- 收藏
- 关注
转载 关于C++中的大小端、位段(惑位域)和内存对齐
听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能加深对计算机系统的理解。 声明:由于本文的代码会受到计算机环境的影响,故在此说明本篇博文中的程序的运行环境。 1、Mi
2012-10-22 10:54:07
1594
转载 浮点型转换整型的快速方法介绍
[注明] 现有的Intel中的SSE指令 cvtps2dq XMM,XMM/m128 支持把源存储器4个单精度浮点数变成4个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节,另外还有其他指令支持双精度和整型的转换。转载本文,作为C算法设计的探讨。在计算机图形运算中,常常要将浮点数转换为整数,例如在图像的光栅化阶段,就要执行大量的类型转换,以便将浮点数表示的坐标转化为整数表示
2012-09-21 21:07:50
14667
转载 类的大小——sizeof 的研究
先看一个空的类占多少空间?+ expand sourceview plaincopy to clipboardprint?class Base { public: Base(); ~Base(); }; class Base{public:Base();~Base();}; 注意到我这里显示声明了
2012-09-21 19:43:59
684
转载 类的大小
class X{};class Y:public virtual X{};class Z:public virtual X{};class A:public Y,public Z{};sizeof X:1 Y:4Z:4A:8类的实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的
2012-09-21 19:43:17
619
转载 sizeof函数总结
sizeof函数功能:计算数据空间的字节数1.与strlen()比较strlen计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\0"的大小)。2.指针与静态数组的sizeof操作指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。
2012-09-21 19:42:27
930
转载 虚函数表指针,虚函数表
虚函数表对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其内容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重
2012-09-21 15:16:16
4036
转载 int main(int argc,char* argv[])详解
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[]){ int i; for (i = 0; ii++)coutcin>>i; return 0; } 执行时敲入 F:\MYDOCU~1\TEM
2012-09-13 16:26:27
548
转载 转义字符
转义字符表:转义字符意义ASCII码值(十进制)\a响铃(BEL)007\b退格(BS)008\f换页(FF)012\n换行(LF)010\r回车(CR)013\t水平制表(HT)009\v垂直制表(VT)011\\
2012-09-13 14:51:01
859
转载 单双精度浮点数的IEEE标准格式
单双精度浮点数的IEEE标准格式关键字:浮点数 IEEE标准大多数高级语言按照IEEE-754标准来规定浮点数的存储格式。IEEE-754规定 单精度浮点数用4字节存储,双精度浮点数用8字节存储,表示为三部分:符号位、阶和尾数。S+E+MS 符号位,尾数的符号位;E 阶,即指数;M 尾数,即有效小数位数;单精度格式符号位 1位, bit31阶 8位,
2012-09-08 20:24:18
3052
转载 堆与栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2012-09-08 15:37:41
424
原创 << 的思考
由一个程序引发的思考:#include int main(){ int w = sizeof(int) printf("%.8x -- %.8x -- w is %d\n", -1 system("pause"); return 0;}结果是:00000000 -- ffffffff--w is 32
2012-09-03 12:28:48
455
转载 指针赋值的问题
转自:http://blog.csdn.net/snowq/archive/2008/01/17/2050129.aspx最近写了一个小程序,遇到一点小问题,是关于指向字符串的指针的。由此一发不可收拾,好奇心驱使我决定研究一下指针的初始化和赋值规则。略有所得之后,执笔记下,以备后用。1、指针的初始化初看起来,指针的初始化和赋值好像很混乱,又是*,又是&,时不时又出来一个数组。其实总结起
2012-08-13 22:22:39
578
转载 const用法详解
面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法2.
2012-08-12 18:52:11
351
转载 sizeof求结构体大小
运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。C语言中的构造数据类型有三种:数组、结构体和共用体。数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上元素的个数。结构体中的成员可以是不同的数据类型
2012-08-12 15:09:26
377
转载 位域
部分转自:http://blog.csdn.net/ztz0223/archive/2008/12/24/3599016.aspx//假设硬件平台是intel x86(little endian) typedef unsigned int uint32_t; void inet_ntoa(uint32_t in) { char b[18];
2012-08-12 14:56:55
596
原创 笔试题strcpy写法
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * str
2012-08-08 20:23:23
428
原创 类继承权限
继承方式包括public、protected、private三种,总结如下,竖列是继承方式,横列是基类成员类型:继承方式 访问方式publicprivateprotectedpublicpublic不可访问protectedprivatepri
2012-08-08 14:48:53
802
原创 scanf函数
1.空白符问题 #include main() { int a; printf( "input the data\n "); scanf( "%d\n ",&a);//这里多了一个回车符\n printf( "%d ",a); return 0; } 结果要输入两个数程
2012-08-05 10:27:37
425
转载 C++模板详解
C++ 模板分为2类:1. 函数模板格式:template 反回类型函数名(参数列表){函数体}比如:template void swap(T& a, T& b){}调用时:int a,b;swap(a,b);double d1,d2;swap(d1,d2);但是下面写法是错误的:swap(int,int):不能在函数调用的参数中指定模
2012-07-31 21:15:46
943
转载 内存溢出攻击分析
什么是内存溢出?简单的说,内存溢出就是程序向内存写入了比分配更多的空间更多的内容。攻击者据此控制程序执行的路径,冒名执行它的代码。对那些好奇这一切都是如何发生的人,本文试图详细介绍攻击的实现机制并提出一些预防措施。从我们知道的经验来看,大多都听说过这些攻击,但是很少几个真的理解攻击的具体机制,有些人有些模糊的印象,甚至有些人根本不知道越界攻击是什么。还有些人认为这个属于秘密的智慧和技能只有少数
2012-07-27 08:54:28
10351
转载 拷贝构造函数与赋值函数
由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心: @ 如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String 的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b.m_data 的内容为“world
2012-07-21 16:47:04
458
转载 大端模式和小端模式
在 各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机 通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面先从字节序说起。一、什
2012-07-14 16:40:24
1044
转载 static静态变量的理解
静态变量 类型说明符是static。静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中始终
2012-07-14 16:35:10
532
转载 C语言数组首地址和数组名取地址区别
原文地址:http://hi.baidu.com/surfmygod/blog/item/53d44914cdb8a5d6a7ef3f13.html本文适用于机器为32位,编译器为VC6.0。先来看下面一个例子:main(){int a[5]={0x11121314,0x21222324,0x31323334,0x41424344,0x51525354};int *pt
2012-07-14 16:34:40
851
转载 MFC的程序执行顺序
很多刚学MFC的人都会被MFC给弄的晕头转向。以前传统的C语言中的main()不见了,window sdk api 中的WinMain()函数也不见了,到底用MFC编写的程序是如何开始运行的呢?到底MFC有没有遵从最基本的C++的标准呢?到底MFC的代码运行的顺序又是怎么样的呢?那么多个文件,那么多函数,到底哪一个先运行,哪一个后运行,哪一个调用哪一个,哪一个又被哪一个调用(你看晕了吧?那么多“哪
2012-07-14 16:34:15
424
转载 C++继承:同名隐藏、覆盖,虚函数
不同作用域声明的标识符的可见性原则: 如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见,如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。 在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互
2012-07-14 16:32:57
564
转载 C++虚函数
虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。 多态指同一个方法根据其所属的不同对象可以有不同的行为。 下面来看一个例子: 程序运行输出结果: 8, 12 为什么Base
2012-07-14 16:32:37
367
转载 [算法之回溯法] 子集树与排列树
当所给的问题是从n个元素的集合S中找出满足某种性质的排列时,相应的解空间即使一颗子集树。这类子集树通常有2^n个节叶节点。所需要的时间复杂度是O(2^n); 当所给的问题确定n个元素满足某种性质的排列时,相应的解空间树成为排列树。排列树有n!个叶结点。因此遍历该树所用的时间复杂度是O(n!) 回溯法搜索子集树算法描述为: void backtrack(int
2012-07-14 16:28:58
2325
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人