Sizeof

原创 2005年04月29日 09:13:00

下列程序在VC/Window 平台和 GCC/Linux平台下面的输出分别是多少呢? 你都知道结果和原因吗?

1:
int result = 0;
result = sizeof(int);
2:
int result = 0;
int a = 0;
result = sizeof(a);
4:
int result = 0;
void func1(){return;};
result = sizeof(func1);
5:
int result = 0;
result = sizeof(double);
6:
int result = 0;
struct s1{char a; double b};
result = sizeof(s1);
7:
int result = 0;
stuct s2{char a; char b; int c};
result = sizeof(s2);
8:
int result = 0;
struct s3{char a; char b; char c; int d};
result = sizeof(s3)
9:
int result = 0;
int a[10];
result = sizeof(a);

10:
int result = 0;
ing *pa = new int[10];
result = sizeof(pa);

sizeof功能是求出一个变量的大小(字节)
第四条,其实我要说的是函数指针的大小, 写成 sizeof( &func1)就对了, 在windows下面一般是4字节的, 不过在有写平台上就和普通指针不一样, 可能要大一些

第6,7,8条都是设计到一个字节对齐的问题,
在VC下面莫认的结构体都是要以4字节的倍数对齐的, 所以这样可能会使某些结构大小发生变化.
第6条, 因为一个double占的是8字节,所以编译器为了对齐8字节,把前面的一个char也给了8字节, 所有是16字节
第7条, 因为int占的是4字节, 所以编译器按4字节对齐, 虽然前面两个char只有2字节,但也给了4字节的空间, 所以是8字节
第8条, 和第7条同样的道理.

--------------------------
如果你不想要编译自作主张的做这些事情, 你可以用指令
#pragma pack(1) 来命令编译器按单字节对齐就可以了.不过这样运行效率可能要低一些.

为了不浪费空间, 所以最在定义结构的时候把占空间的的成员放前面, 小的放到后面

C/C++基础::sizeof() 与 sizeof(string)

sizeof(string 对象) ≠ string 对象的.size()成员函数(.size()与.length()不作区别,返回 string 的字符个数) string 的实现在各库中可能有所不...
  • lanchunhui
  • lanchunhui
  • 2016年02月25日 16:05
  • 2023

浅析C++中sizeof操作符的用法

1. 概要 sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月31日 11:27
  • 2067

sizeof(数组名)和sizeof(指针)

在做这道题时: 32位环境下,int *p=new int[10];请问sizeof(p)的值为() A、4              B、10              C、40        ...
  • KangRoger
  • KangRoger
  • 2014年03月06日 21:24
  • 89016

sizeof是如何实现的,和内核里面宏如出一辙

0x00    很多东西用多了就缺乏了,洞察力,觉得就该如此。这也许就是中国那句老话:当局者迷。今天看到c群里面的一个学生问求一个数组的大小如何写,当然不由自主的敲了sizeof    0x04...
  • u013372900
  • u013372900
  • 2017年08月19日 00:39
  • 476

关于sizeof运算符的详细解析

关于sizeof运算符的详细解析: Part I:最基本的概念与基本使用方法:sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其...
  • michaelrun
  • michaelrun
  • 2007年10月12日 12:00
  • 6073

关于sizeof(a)和sizeof(*a)

举例说明, #define countof(a) (sizeof(a) / sizeof(*(a)))//计算数组内成员个数 再具体一点: a 是一个int型数组,有10个元素, sizeof...
  • greatxiaoting
  • greatxiaoting
  • 2016年09月26日 22:53
  • 1395

关于sizeof的笔试面试题详解

注意:sizeof是编译期计算出结果的,这一点对后面的理解很重要。 通过搜集资料和博主之前笔试面试中的经验,总结出三个方面...
  • Hello_Hwc
  • Hello_Hwc
  • 2014年11月16日 10:24
  • 3166

C语言中的sizeof(struct )和sizeof(union)

一般32位机上各数据类型所占存储空间为: char : 8位 short : 16位 int : 32位 long : 32位 float : 32位 double : 64位 一、结构体stru...
  • yagnruinihao
  • yagnruinihao
  • 2013年11月06日 21:19
  • 1913

Java:sizeof()用法汇总

sizeof()功能:计算数据空间的字节数 1.与strlen()比较       strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。       而siz...
  • HMYANG314
  • HMYANG314
  • 2014年09月22日 17:15
  • 2039

关于传递参数时,涉及数组的length = sizeof(a)/sizeof(int)还是为length = sizeof(a)的总结

1.以memset函数举例说明吧!#include void test_memset() { printf("set int to 0\n"); int a[] = {1,2,3,4...
  • daa20
  • daa20
  • 2016年06月12日 10:23
  • 1203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sizeof
举报原因:
原因补充:

(最多只允许输入30个字)