C语言内存分配示例 与 字节对齐示例

本文通过示例介绍了C语言中sizeof关键字的使用,包括计算数据类型和结构体占用内存的字节数。同时,文章讨论了字节对齐的概念,指出结构体内成员变量的排列依赖于编译器设置。此外,还强调了sizeof在编译阶段进行计算,不能用于函数、未确定类型的表达式或位域成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cpp代码 1.// Example of the sizeof keyword 2.size_t i = sizeof( int ); 3. 4.struct align_depends { 5. char c; 6. int i; 7.}; 8.size_t size = sizeof(align_depends); // The value of size depends on 9. // the value set with /Zp or 10. // #pragma pack 11. 12.int array[] = { 1, 2, 3, 4, 5 }; // sizeof( array ) is 20 13. // sizeof( array[0] ) is 4 14.size_t sizearr = // Count of items in array 15. sizeof( array ) / sizeof( array[0] ); // Example of the sizeof keyword size_t i = sizeof( int ); struct align_depends { char c; int i; }; size_t size = sizeof(align_depends); // The value of size depends on // the value set with /Zp or // #pragma pack int array[] = { 1, 2, 3, 4, 5 }; // sizeof( array ) is 20 // sizeof( array[0] ) is 4 size_t sizearr = // Count of items in array sizeof( array ) / sizeof( array[0] ); 1. 用法 1.1 sizeof和new、delete等一样,是关键字,不是函数或者宏。 1.2 sizeof返回内存中分配的字节数,它和操作系统的位数有关。例如在常见的32位系统中,int类型占4个字节;但是在16位系统中,int类型占2个字节。 1.3 sizeof的参数可以是类型,也可以是变量,还可以是常量。对于相同类型,以上3中形式参数的sizeof返回值相同。 Cpp代码 1.int a; 2.sizeof(a); // = 4 3.sizeof(int); // = 4 4.sizeof(1); // = 4 int a; sizeof(a); // = 4 sizeof(int); // = 4 sizeof(1); // = 4 1.4 C99标准规定,函数、不能确定类型的表达式以及位域(bit-field)成员不能被计算s izeof值,即下面这些写法都是错误的。 Cpp代码 1.void fn() { } 2.sizeof(fn); // error:函数 3.sizeof(fn()); // error:不能确定类型 4.struct S 5.{ 6. int a : 3; 7.}; 8.S sa; 9.sizeof( sa.a ); // error:位域成员 void fn() { } sizeof(fn); // error:函数 sizeof(fn()); // error:不能确定类型 struct S { int a : 3; }; S sa; sizeof( sa.a ); // error:位域成员 1.5 sizeof在编译阶段处理。由于sizeof不能被编译成机器码,所以sizeof的参数不能被编译,而是被替换成类型。 Cpp代码 1.int a = -1; 2.sizeof(a=3); // = sizeof(a) = sizeof(int) = 4 3.cout<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值