zoukankan      html  css  js  c++  java
  • C++ sizeof

    1、字符串的sizeof与strlen:

    如果是指针形式,如char* ss="0123456789"则sizeof(ss)结果为4,指针占4字节(int,long, float类型也都占四字节)。但是注意sizeof(*ss)结果为1,因为*ss表示第一个字符(char占一个字节)。
    如果是数组形式,如char ss[100]="0123456789",那么sizeof(ss)结果为100。
    strlen只能用于计算由结尾的字符串的长度,strlen(ss)无论是指针形式还是数组形式,都是输出10.
    string对象的sizeof(string对象),无论字符串多长,结果都是32,因为这是string类的大小。如果想要获得字符串的长度,需要调用string类的成员函数string对象.length()
    2、sizeof(结构体/类)
    当结构体内的数据长度都小于处理器的位数的时候,按结构体里面最长的数据元素为对齐单位。当结构体内的数据长度有大于处理器的位数的时候,按处理器的位数为对齐单位,如64位按8字节对齐,32位按4字节对齐。
    class B
    {
    private:
    bool m_bTemp;
    int m_nTemp;
    bool m_bTenp2;
    };
    class C
    {
    private:
    int m_nTemp;
    bool m_bTemp;
    bool m_bTemp2;
    };
    B对齐情况:
    |bool|----|----|----|
    |--------int--------|
    |bool|----|----|----|
    所以sizeof(B)结果是12
    C对齐情况:
    |--------int--------|
    |bool|bool|----|----|
    所以sizeof(C)结果是12
    对齐存储的好处:
    地址总线是按照对齐后的地址来访问。例如你想得到0x00000001开始的4字节内容,系统首先需以0x00000000读4字节,从中取得3字节,然后再从0x00000004开始读下一个4字节,再从中得到第一个字节,两次组合出你想要的内容。而数据对齐存储后,只需要一次读写即可。
    class A{};class A2{};
    class B: public A{};
    class C:public virtual B{};
    class D:public A, public A2;
    空类的大小为1个字节,且单一继承,多重继承空类空间也是1,所以A,B,D的大小都是1。但是虚继承涉及到虚表(虚指针)所以size(C)的结果是4
    3、sizeof(函数名)
    在编译阶段函数名会被函数返回类型所取代。
  • 相关阅读:
    野指针防范
    Linuxgate.so.1的含义[ZZ]
    malloc hook
    用PDF补丁丁一分钟批量删除PDF文档的第一页和最后一页
    PDF 补丁丁 0.4 测试版已经上线
    生活小百科:实用的生活保健小窍门,60则!....
    Pascal Analyzer 4 代码分析使用简要说明
    大数法则
    make: *** No rule to make target `all'. Stop.
    界面动态配置:持久化反持久化
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4620272.html
Copyright © 2011-2022 走看看