实验: 内建数据类型的size

原创 2011年01月14日 08:15:00
// test1020.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

int fnCalculateBuildInDataSize();

int _tmain(int argc, _TCHAR* argv[])
{
    fnCalculateBuildInDataSize();

    getwchar();
    return 0;
}

int fnCalculateBuildInDataSize()
{  
    printf("size of BOOL = %d[Bytes]\r\n", sizeof(BOOL));  
    printf("size of CHAR : %d[Bytes]\r\n", sizeof(CHAR));  
    printf("size of BYTE : %d[Bytes]\r\n", sizeof(BYTE));  
    printf("size of SHORT : %d[Bytes]\r\n", sizeof(SHORT));  
    printf("size of INT : %d[Bytes]\r\n", sizeof(INT));  
    printf("size of LONG : %d[Bytes]\r\n", sizeof(LONG));  
    printf("size of ULONG : %d[Bytes]\r\n", sizeof(ULONG));  
    printf("size of DWORD : %d[Bytes]\r\n", sizeof(DWORD));  
    printf("size of FLOAT : %d[Bytes]\r\n", sizeof(FLOAT));  
    printf("size of DOUBLE : %d[Bytes]\r\n", sizeof(DOUBLE));  
    printf("size of PVOID : %d[Bytes]\r\n", sizeof(PVOID));  
    printf("\r\n");  
    printf("size of bool = %d[Bytes]\r\n", sizeof(bool));  
    printf("size of char : %d[Bytes]\r\n", sizeof(char));  
    printf("size of unsigned char : %d[Bytes]\r\n", sizeof(unsigned char));  
    printf("size of short int : %d[Bytes]\r\n", sizeof(short int));  
    printf("size of int : %d[Bytes]\r\n", sizeof(int));  
    printf("size of long : %d[Bytes]\r\n", sizeof(long));  
    printf("size of unsigned long : %d[Bytes]\r\n", sizeof(unsigned long));  
    printf("size of float : %d[Bytes]\r\n", sizeof(float));  
    printf("size of double : %d[Bytes]\r\n", sizeof(double));  

    //printf("size of void : %d[Bytes]\r\n", sizeof(void));//void 不能用sizeof来计算size   
    printf("size of void * : %d[Bytes]\r\n", sizeof(void *));  

    /** 运行结果 relase by x86
    size of BOOL = 4[Bytes]
    size of CHAR : 1[Bytes]
    size of BYTE : 1[Bytes]
    size of SHORT : 2[Bytes]
    size of INT : 4[Bytes]
    size of LONG : 4[Bytes]
    size of ULONG : 4[Bytes]
    size of DWORD : 4[Bytes]
    size of FLOAT : 4[Bytes]
    size of DOUBLE : 8[Bytes]
    size of PVOID : 4[Bytes]

    size of bool = 1[Bytes]
    size of char : 1[Bytes]
    size of unsigned char : 1[Bytes]
    size of short int : 2[Bytes]
    size of int : 4[Bytes]
    size of long : 4[Bytes]
    size of unsigned long : 4[Bytes]
    size of float : 4[Bytes]
    size of double : 8[Bytes]
    size of void * : 4[Bytes]
    */  

    /** 运行结果 relase by x64
    size of BOOL = 4[Bytes]
    size of CHAR : 1[Bytes]
    size of BYTE : 1[Bytes]
    size of SHORT : 2[Bytes]
    size of INT : 4[Bytes]
    size of LONG : 4[Bytes]
    size of ULONG : 4[Bytes]
    size of DWORD : 4[Bytes]
    size of FLOAT : 4[Bytes]
    size of DOUBLE : 8[Bytes]
    size of PVOID : 8[Bytes]

    size of bool = 1[Bytes]
    size of char : 1[Bytes]
    size of unsigned char : 1[Bytes]
    size of short int : 2[Bytes]
    size of int : 4[Bytes]
    size of long : 4[Bytes]
    size of unsigned long : 4[Bytes]
    size of float : 4[Bytes]
    size of double : 8[Bytes]
    size of void * : 8[Bytes]
    */  

    return S_OK;  
}

/**
实验结论:
    * 不管是哪种平台的PE, double size = 8Bytes

    * X64PE, void * size = 8Bytes
    * X86PE, void * size = 4Bytes
 
    * BOOL 是宏, size = 4
    * bool 是内建数据类型 size = 1
*/


 

    nSize1 = sizeof(PVOID64);   ///< x86, x64下都是8
    nSize2 = sizeof(PVOID);     ///< x86下是4, x64下是8



 

<2013_0529>

sizeof(ULONGLONG) = 8
sizeof(INT64) = 8

<2013_0902>

// testMacro.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _X86_
    _tprintf(L"x86 : DWORD size = %d\r\n", sizeof(DWORD));
    _tprintf(L"x86 : DWORD_PTR size = %d\r\n", sizeof(DWORD_PTR));
#else ifdef (_IA64_ || _AMD64_)
    _tprintf(L"x64 : DWORD size = %d\r\n", sizeof(DWORD));
    _tprintf(L"x64 : DWORD_PTR size = %d\r\n", sizeof(DWORD_PTR));
#endif

    _tprintf(L"\r\nEND, press anykey to quit\r\n");

    getwchar();

    /// run results
    /// x86 : DWORD size = 4
    /// x86 : DWORD_PTR size = 4

    /// x64 : DWORD size = 4
    /// x64 : DWORD_PTR size = 8
    return 0;
}

<2017-10-10>

在gcc-elf64下, sizeof(long) or sizeof(unsigned long) = 8, 而不是4.

在vs下不管x86, x64, sizeof(long) or sizeof(unsigned long) = 4, 都是4.


 

版权声明:

Python内建对象类型

在Python中,所有数据都是对象,数据有各种类型,如数值型、列表型、字符串型等。除系统内建的数据类型外,程序员也可以创建自已的数据类型。以下主要介绍Python内建的数据类型。 3.1...
  • MeetLunay
  • MeetLunay
  • 2014年01月04日 14:31
  • 1150

Python中内建变量的使用

#专用下划线标示符 #python用下划线作为变量前缀和后缀指定特殊变量。稍后我们会发现, #对于程序来说,其中的有些变量是非常有用的,而其他的则是未知或者无用的。 #我们总结一下Python中下划线...
  • liuguiyangnwpu
  • liuguiyangnwpu
  • 2013年07月24日 10:31
  • 3544

awk的内建变量

这里介绍的是awk的一些内建变量。 内建变量 含义 $0 当前记录(这个变量中存放着整个行的内容) $1-$n 当前记录的第n个字段,字段间由FS分隔 FS (Field S...
  • renwotao2009
  • renwotao2009
  • 2015年07月20日 10:48
  • 758

python源代码剖析--读书笔记:第1章 Python内建对象

第1章 Python内建对象 python中一切皆为对象,类型也是对象。 内建类型对象:预先定义的类型对象,例如int类型 python是由C实现的。   1.1Python内的对象 对象...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2017年03月21日 00:04
  • 219

jsp的内建对象

JSP的内建对象不需要由JSP编写人员实例化,它们均由容器管理和实现,在所有的JSP页面中都能使用.只在Scriptlet或者表达式中使用.它们是:1.request对象:           代表请...
  • mayc7306
  • mayc7306
  • 2007年06月16日 15:19
  • 3268

JSP九大内建对象

JSP的内建对象不需要由JSP编写人员实例化,它们均由容器管理和实现,在所有的JSP页面中都能使用.只在Scriptlet或者表达式中使用.它们是: 1.request对象:           代表...
  • jacktree365
  • jacktree365
  • 2017年07月11日 13:50
  • 403

练习:试编写一个函数ChangeSize2D 来改变一个二维数组的大小

/*-------------------------------------------------- 试编写一个函数ChangeSize2D 来改变一个二维数组的大小 --------------...
  • yss28
  • yss28
  • 2013年09月21日 23:43
  • 660

python内建函数及属性

range()
  • dan520811
  • dan520811
  • 2016年05月11日 16:53
  • 326

Jsp中9大内建对象

频繁使用的:             request:(HttpServletRequest):getAttribute("key"),setAttribute("key",value);getPa...
  • qiangzi9009
  • qiangzi9009
  • 2013年10月11日 11:07
  • 1617

js中内建对象

JavaScript charAt() 函数 string.charAt(n) -- 返回指定位置(n)的字符 char是character的缩写,中文"符号,字符"引用网址:http://ww...
  • xiaguangzhiying
  • xiaguangzhiying
  • 2014年10月16日 16:44
  • 1197
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实验: 内建数据类型的size
举报原因:
原因补充:

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