• 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(函数名)
    在编译阶段函数名会被函数返回类型所取代。
  • 相关阅读:
    极光推送
    ModelAndView跳转页面的时候,显示了页面的源码问题
    关于字符串比较时候出现的空指针问题的坑
    JAVA的extends用法
    C# 平面文件批量导数据到DB(二)
    C# 平面文件批量导数据到DB(一)
    C#操作文件和文件夹的类介绍
    C# 实现监控文件夹和里面文件的变化
    SQL Server 2012 Throw关键字
    SQL SERVER EXCEPT 和 INTERSECT
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4620272.html
Copyright © 2020-2023  润新知