C语言关键字之sizeof
C语言关键字 sizeof 是一个操作符,返回对象或类型所占内存字节数,类型为size_t(定义在<stddef.h>),有2种用法:
- sizeof unary-expression
- sizeof (type-name)
sizeof不能应用的场合:
- an expression that has function type or an incomplete type
- the parenthesized name of such a type
- an expression that designates a bit-field member
如果操作数的类型是VLA (variable length array),要进行evaluate;否则不需要evaluate,结果是一个整形常量。
示例1 进程间通信 比如storage allocator 和 I/O system
extern void *alloc(size_t);
double *dp = alloc(sizeof *dp);
示例2 计算数组中元素个数
sizeof array / sizeof array[]
示例3 VLA大小计算
#include <stddef.h>
size_t fsize3(int n)
{
char b[n+]; // variable length array
return sizeof b; // execution time sizeof
}
int main()
{
size_t size;
size = fsize3(); // fsize3 returns 13
return ;
}
ANSI C规定字符型1字节,其余sizeof的返回结果与编译器实现相关。在32位系统中:
1. 基本类型
_Bool 1
char 1
short 2
int 4
long 4
long long 8
float 4
double 8
long double 12
_Complex 16
void 1
2. 指针
4
3. 枚举
4
4. 数组
数组长度 * 数组成员size
5. 结构体
字节对齐值:ALIGN
基本类型成员:SIZE
每个成员相对于结构体首地址的偏移都是min(ALIGN, SIZE)的整数倍,可能在成员间加填充字节
结构体总大小为min(ALIGN, SIZEmax)的整数倍,可能在最后一个成员后加填充字节
6. 联合
规则类似struct
测试程序:
#include <stdio.h>
#include <complex.h> #define SIZEOF(x) printf("size of '%s' is %zd\n", #x, sizeof(x)); int main() {
SIZEOF(_Bool);
SIZEOF(char);
SIZEOF(short);
SIZEOF(int);
SIZEOF(long);
SIZEOF(long long);
SIZEOF(float);
SIZEOF(double);
SIZEOF(long double); // depends on -m128bit-long-double
SIZEOF(_Complex);
SIZEOF(void); SIZEOF(void*);
SIZEOF(void (*)(void)); // function pointer SIZEOF(enum {E}); SIZEOF(char []); // zero-size array
SIZEOF(int []); SIZEOF(struct {}); // empty struct
SIZEOF(struct {char c;});
SIZEOF(struct {char c; short s;}); // alignment
SIZEOF(struct {int i; char c;});
SIZEOF(struct {int i; char c;} __attribute__((packed)));
#pragma pack(push)
#pragma pack(1)
printf("With #pragma pack(1): ");
SIZEOF(struct {int i; char c;});
#pragma pack(pop)
SIZEOF(struct {double d; char c;}); // depends on -malign-double SIZEOF(struct {char c1:; char :; char c2:;}); // bit field
SIZEOF(struct {int i:; char c:;}); SIZEOF(struct {struct {int i; char c;}; short s;});
SIZEOF(struct {struct {short s1; char c;}; short s2;});
SIZEOF(struct {char c2; struct {short s1; char c1;}; short s2;}); SIZEOF(union {char c; int i;}); // union
return ;
}
C语言关键字之sizeof的更多相关文章
- C语言关键字—-sizeof 、typedef、const、static、register、extern、#define
关键字:sizeof .#define.typedef.const.static.register.extern sizeof 1. 作用:求数据所占得内存空间大小 2. 本质:求数据得类型所占的内存 ...
- FILE不是C语言关键字
FILE不是C语言关键字,只是标准C中的标准输入输出中定义的一个新的数据类型 stdio.htypedef struct _iobuf{ char* _ptr; int _cnt; char* _ba ...
- 李洪强漫谈iOS开发[C语言-009] - C语言关键字
// // main.m // 04 - C语言关键字 // // Created by vic fan on 16/7/12. // Copyright © 2016年 李洪强. All r ...
- c语言关键字总结
1.关键字变更历史 1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字: inline restrict _Bool _Complex _Imaginary(注意bool 从 ...
- 1.C语言关键字(auto break case char const swtich)
ANSI C标准C语言共有32个关键字,分别为: auto break case char const continue default do double else enum extern floa ...
- C/C++ 知识点---C语言关键字(32个)
C/C++ 知识点 1.C语言关键字(32个) <1>.基本数据类型 [5] void :声明函数无返回值或无参数,声明空类型指针 char :声明字符型变量 int :声明整形变量 fl ...
- 继续学习:C语言关键字
auto :声明自动变量 break:跳出当前循环 case:开关语句分支 char :声明字符型变量或函数 const :声明只读变量 continue:结束当前循环,开始下一轮循环 default ...
- 统计C语言关键字出现次数
统计C语言关键字出现次数 <C程序设计语言>K&R版本第6章结构6.3结构数组内容 /* Name: 统计c语言关键字出现次数 Copyright: Author: lingr7 ...
- C语言关键字-volatile
1.C语言关键字volatile C 语言关键字volatile(注意它是用来修饰变量而不是上面介绍的__volatile__)表明某个变量的值可能在外部被改变,因此对这些变量的存取 不能缓存 ...
随机推荐
- Ajax_数据格式_JSON
[JSON] 1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSO ...
- RequestMapping_Ant 路径
[使用@RequestMapping映射请求] [Ant风格资源地址支持3种匹配符] (1)? :匹配文件名中的一个字符. (2) * :匹配文件名中的任意字符. (3) ** :**匹配多层路径. ...
- selectByExampleWithBLOBs-----搜索结果包含大字段类型----搜索结果包含大字段类型
http://www.jb51.net/article/121482.htm mybatis generator 使用方法教程(生成带注释的实体类)
- LeetCode 788. Rotated Digits (旋转数字)
X is a good number if after rotating each digit individually by 180 degrees, we get a valid number t ...
- HDOJ 4705 Y 树形DP
DP:求出3点构成链的方案数 .然后总方案数减去它 Y Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- 3.1 The Interpolating Polynomial(站点)
Cubic Interpolation: https://www.youtube.com/watch? v=EtzlEA9MIwI Quad ...
- [Unity UGUI]ScrollRect效果大全
UGUI各种优化效果 本文所实现的UGUI效果需求如下: - 支持缩放滑动效果 - 支持动态缩放循环加载 - 支持大数据固定Item复用加载 - 支持不用Mask遮罩无限循环加载 - 支持Object ...
- js实现伪音乐盒
支持快进 <div class="music-part"> <div class="box-bg"></div> <d ...
- Windows中的时区信息
时区 Windows API 没有提供直接得到特定时区信息的功能,Windows 系统中的时区信息存储在注册表中下面的位置: HKEY_LOCAL_MACHINE SOFTWARE ...
- Java中去除字符串中的空格
1.去掉首尾的空格 String.trim() trim()是去掉首尾空格 2.去掉所有的空格 str.replace(" ", ""); 去掉所有空格,包括 ...