设为首页 加入收藏

TOP

C/C++ sizeof 总结
2013-11-20 14:24:37 来源: 作者: 【 】 浏览:179
Tags:C/C   sizeof  总结

  最近很多C/C++的笔试面试中都会涉及到sizeof的问题,所以在此总结一下。

  1. 定义

  首先要注意的是sizeof不是函数, 是C的一个单目运算符(++, --等)。

  sizeof有2种使用方式:

  (1) sizeof( object / type )

  (2) sizeof  object

  如:=

  [cpp]

  <span style="font-size:14px">sizeof( int)  ; sizeof( i );

  sizeof  int ; //error</span>

  一般采用第一种方式

  返回值:size_t 类型。

  2. sizeof ( 基本数值类型 )

  直接返回数值类型所占用的内存空间

  [cpp]

  <span style="font-size:14px">//ANSI C正式规定字符类型为1字节。

  sizeof(char)          = 1;

  sizeof(unsigned char) = 1;

  sizeof(signed char)   = 1;

  //以下类型ANSI没有规定,依赖于OS和编译器,但大小一般差不多

  sizeof(int)            = 4;

  sizeof(unsigned int)   = 4;

  sizeof(short int)      = 2;

  sizeof(unsigned short) = 2;

  sizeof(long int)       = 4;

  sizeof(unsigned long)  = 4;

  sizeof(float)          = 4;

  sizeof(double)         = 8;

  sizeof(long double)    = 12;</span>

  3. sizeof (  pointer )

  在32位系统中,无论何种情况下都是4

  [cpp] view plaincopy

  <span style="font-size:14px">   int *i;

  char *str = "test";

  void (*pf)();

  printf( "sizeof pointer is 4: %d %d %d \n", sizeof(i), sizeof( str ), sizeof( pf ) );</span>

  4. sizeof (  array )

  该数组所占用的内存空间。(在string 中计算'\0')。

  [cpp]

  <span style="font-size:14px">   int iv_a ;           //10

  char cv_str[] = "hi";  //3

  char cvv_str [100];  //1000

  char *cp_c = cv_str;

  printf( "sizeof array is len*size: %d %d %d %d", sizeof(iv_a), sizeof(cv_str), sizeof( cvv_str ),sizeof( cvv_str[0] ) );</span>

  注意多维数组的情况。

  如果array是形参,那么它便不是数组了,而是指针。

  5. sizeof( struct )

  此时要注意字节对齐的问题。

  字节对齐:为了便于取址,让基本数据类型的地址是数据宽度(所占空间)的整数倍上。

  struct :struct 宽度w = max{ mi.w ; mi是struct 的基本数据成员 }

  struct 字节对齐规则:

  (1)首地址 addr = nw  n>0

  (2)每个成员的首地址 addr = nw  n>0

  (3)size( struct ) = nw  n>0

  [cpp]

  <span style="font-size:14px">typedef struct S1

  {

  short a;

  int b;

  char c;

  }S1;

  typedef struct S2

  {

  char a;

  S1 b;

  char c;

  }S2;</span>

  S1 的数据宽度w= 4;

  S2的宽度的计算是将S1各个成员拆成基本数据类型,然后计算w

  a后补2byte,规则2

  c后补3byte,规则3

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇剖析变长参数函数的实现 下一篇C++各个容器比较

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)