C++基础知识——sizof关键字

sizeof用来计算变量在所占内存的大小,以字节为单位

C++整型数据长度标准:

short 至少16位

int 至少与 short 一样长

long 至少32位,且至少与 int 一样长

long long 至少64为,且至少与 long 一样长

很多系统都使用最小长度,short 为16位即2个字节,long为32位即4个字节,long long位64位即8个字节,int 的长度较为灵活,一般认为 int 的长度为4个字节,与 long 等长.

sizeof计算大小的小技巧

  1. 指针的大小永远是固定的,取决于处理器位数,32位就是4字节,64位就是8字节。
  2. 数组作为函数参数时会退化为指针,大小要按指针的计算。
  3. struct 结构体要考虑字节对齐。
  4. 字符串数组要算上末尾的 '\0' 。
// 前提: 64 位电脑上

#include <iostream>

using namespace std;

char str[] = "1234567890" ;
char *p = str;
double dp;
float f = 0.1;
int n = 10;
void *vp = malloc( 100 );

struct AlignedStruct {
    char a;   // 本来1字节,padding 3 字节
    int b;    //  4 字节
    short c;  // 本来 short 2字节,但是整体需要按照 4 字节对齐(成员对齐边界最大的是int 4) ,
    //所以需要padding 2,总共: 4 + 4 + 4
};

struct EmptyStruct {};

int Func (char str[10])
{
    cout << sizeof( str )<< endl;
    return sizeof( str ); // 数组做参数退化为 char类型指针,即 8 个字节,总结第2点
}

int main()
{
    cout << "str = " << sizeof(str) << endl;

    cout << "p = " << sizeof(p) << endl;

    cout << "dp = " << sizeof(dp) << endl;

    cout << "f = " << sizeof(f) << endl;

    cout << "n = " << sizeof(n) << endl;

    cout << "vp = " << sizeof(vp) << endl;

    int func = Func(str);
    cout << "Func(str) = " << func << endl;

    cout << "AlignedStruct = " << sizeof(AlignedStruct) << endl;

    cout << "EmptyStruct = " << sizeof(EmptyStruct) << endl;
    
    return 0;
}

运行结果:

strlen与sizeof的区别

strlen 是一个 C 标准库中的函数,用于计算 C 风格字符串(以空字符 '\0' 结尾的字符数组)的长度,即不包括结尾的空字符的字符个数。它的源码如下:

size_t strlen(const char *str) {
    size_t length = 0;
    while (*str++)
        ++length;
    return length;
}

而sizeof 是一个 C++ 编译期间计算的操作符,用于计算数据类型或对象所占用的字节数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值