c++ 堆和栈的区别 ,sizeof详解以及sizeof与strlen的区别,memset和fill的比较

在以下几篇博文里详细介绍了堆和栈的区别:

http://blog.chinaunix.net/uid-26868581-id-3328648.html

http://www.cppblog.com/oosky/archive/2006/01/21/2958.html

这两篇博文都写的很经典,经典的让人无颜在写关于堆栈的事了。

 

sizeof之详解以及sizeof与strlen的区别:

http://blog.chinaunix.net/uid-26868581-id-3328170.html

继承
class A{};
class B{};
class C : public A, public B{};
class D : virtual public A{};
class E : virtual public A, virtual public B{};
sizeof(A) = 1,sizeof(B) = 1(空类大小为1,编译器安插一个char给空类,用来标记它的每一个对象)
sizeof ( C ) = 1      (继承或多重继承后空类大小还是1)
sizeof(D) = 4 (虚继承时编译器为该类安插一个指向父类的指针,指针大小为4)
sizeof(E) = 8  (指向父类A的指针与父类B的指针,加起来大小为8)

函数与虚函数 编译器为每个有虚函数的类都建立一个虚函数表(其大小不计算在类中),并为这个类安插一个指向虚函数表的指针,即每个有虚函数的类其大小至少为一个指针的大小4 class A { public:     int a;     void Function(); };

class B { public:     int a;     virtual void Function(); };

class C : public B{ public:     char b; };

class D : public B{ public:     virtual void Function2();/* Int a;  继承来的  Vptr *p; 虚函数指针*/ };

class E{ public:     static void Function(); };

sizeof (A) = 4   (内含一个int,普通函数不占大小)

sizeof (B) = 8   (一个int ,一个虚函数表指针)

sizeof (C) =12   (一个int ,一个虚函数表指针,一个char ,再加上数据对齐)

sizeof (D) = 8   (一个int ,一个虚函数表指针,多个虚函数是放在一个表里的,所以虚函数表指针只要一个就行了)

sizeof (E) = 1   (static 函数不占大小,空类大小为1)

 父类的私有数据

虽然在子类中不可用,但是是可见的,因此私有的数据还是要占子类的大小

class A{ private:     int a; };

class B:public A{};

sizof(B) =    4;    (内含一个不可用的父类的int

 

memset之详解:

memset函数原型:void *memset(void *s, int ch, size_t n); 对s的n个字节进行赋值。

memset是按字节赋值的。比如说int num[12]; memset(num, 3, sizeof num )

num[0]的二进制则为 11 00000011 00000011 00000011前导省略了6个0,所以num[0]的实际值为50529027

fill函数是对每个变量赋值,就是填充数据,需注意数据溢出。

 

void 的相关知识

http://blog.csdn.net/yming0221/article/details/6249151

转载于:https://www.cnblogs.com/TengXunGuanFangBlog/archive/2013/05/10/stack_dui.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值