有如下CAT_s结构体定义,回答: 1) 在一台64位的机器上,使用32位编译,Garfield变量占用多少内存空间?64位编译又是如何?
2017-01-12 15:35
471 查看
注意:字节对齐
struct CAT_s
{
int ld;
char Color;
unsigned short Age;
char *Name;
void(*Jump)(void);
}Garfield;
使用32位编译,int占4, char 占1, unsigned short int占2,char*占4,函数指针占4个,由于是32位编译是4字节对齐,所以该结构体占16个字节。(说明:按几字节对齐,是根据结构体的最长类型决定的,这里是int是最长的字节,所以按4字节对齐)
使用64位编译 ,int占4, char 占1, unsigned short int占2,char*占8,函数指针占8个,由于是64位编译是8字节对齐,(说明:按几字节对齐,是根据结构体的最长类型决定的,这里是函数指针是最长的字节,所以按8字节对齐)所以该结构体占24个字节。
struct CAT_s
{
int ld;
char Color;
unsigned short Age;
char *Name;
void(*Jump)(void);
}Garfield;
使用32位编译,int占4, char 占1, unsigned short int占2,char*占4,函数指针占4个,由于是32位编译是4字节对齐,所以该结构体占16个字节。(说明:按几字节对齐,是根据结构体的最长类型决定的,这里是int是最长的字节,所以按4字节对齐)
使用64位编译 ,int占4, char 占1, unsigned short int占2,char*占8,函数指针占8个,由于是64位编译是8字节对齐,(说明:按几字节对齐,是根据结构体的最长类型决定的,这里是函数指针是最长的字节,所以按8字节对齐)所以该结构体占24个字节。
不能平台数据类型与所占字节表:
数据类型 | 32位机(字节) | 64位机(字节) | 备注 |
---|---|---|---|
char | 1 | 1 | |
short | 2 | 2 | |
int | 4 | 4 | |
long | 4 | 8 | 32位与64位不同 |
float | 4 | 4 | |
char * | 4 | 8 | 其他指针类型如long *, int * 也是如此 |
long long | 8 | 8 | |
double | 8 | 8 | |
long double | 10/12 | 10/16 | 有效位10字节。32位为了对齐实际分配12字节;64位分配16字节 |
相关文章推荐
- 腾讯2016研发工程师在线模拟笔试题----32位系统中,定义**a[3][4],则变量占用内存空间为()。
- 16位平台、32位平台、64位平台下char、short、int、long、指针 分别占多少字节,操作系统可以使用的最大内存空间
- c语言中定义结构体指针并指向一片内存空间和直接定义一个结构体变量的区别 Node *p=(Node *)malloc(sizeof(Node)); 和 Node p 两个有什么区别??? Node是一
- 如何在linux 32位机器编译64位程序
- 在64位Ubuntu14.04LTS上编译和链接32位汇编程序(使用c标准库)需要如何配置配置环境
- 如何在linux 32位机器编译64位程序
- 有没有人知道如何用64位机器编译32位的Qt库
- 32位网站如何在64位机器上使用
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- C#使用_如何在没有装VS(Visual Studio)的机器上编译运行C#程序
- 不同内存空间(data xdata bdata)定义变量在51单片机编程中的注意事项
- 如何用命令查询一个机器是32位还是64位
- 不同数据类型变量在不同CPU或MCU下的内存占用情况还与编译器或编译选项有关
- 查看同一台机器安装sql2000和sql2005,时打开sql查询分析器,查看当前的数据库引擎。并且如何使用sql2005引擎的问题。
- 64位机器上vs使用32位控件的问题
- 【分享】如何判断个人电脑是多少位(32位?还是64位系统)
- 32位的fortran函数库在64位Linux下编译及使用的方法
- 32位系统上使用64位变量需要注意
- 不同内存空间(data xdata bdata)定义变量在51单片机编程中的注意事项
- 如何让32位的WIN2003服务器使用4G以上内存的方法