下面列举了Dev-C++下基本类型所占位数和取值范围:

基本型                          所占位数              取值范围                输入符举例                                 输出符举例

-- -- char                            8                        -2^7 ~ 2^7-1              %c                                         %c、%d、%u
    
    signed -- char                    8                         -2^7 ~ 2^7-1              %c                                           %c、%d、%u
    
    unsigned -- char                8                          0 ~ 2^8-1                  %c                                            %c、%d、%u
    
    [signed] short [int]            16                            -2^15 ~ 2^15-1        %hd                                              %hd
    
    unsigned short [int]           16                            0 ~ 2^16-1           %hu                                  %hu、%ho、%hx
    
    [signed] -- int                    32                        -2^31 ~ 2^31-1         %d
    
    unsigned -- [int]                 32                        0 ~ 2^32-1              %u、%o、%x
    
    [signed] long [int]              32                       -2^31 ~ 2^31-1         %ld
    
    unsigned long [int]             32                         0 ~ 2^32-1               %lu、%lo、%lx
    
    [signed] long long [int]       64                        -2^63 ~ 2^63-1              %I64d
    
    unsigned long long [int]      64                    0 ~ 2^64-1                 %I64u、%I64o、%I64x
    
    -- -- float                            32                    +/- 3.40282e+038              %f、%e、%g
    
    -- -- double                        64                +/- 1.79769e+308                   %lf、%le、%lg %f、%e、%g
    
    -- long double                    96                   +/- 1.79769e+308          %Lf、%Le、%Lg

注意:int型数据  在不同位数的系统中   所占位数不一样   一些编译器不同也有影响

16         2*8位

32         4*8位

64         8*8位

1 BYTE=8 BIT

内存对齐可以用一句话来概括:

“数据项只能存储在地址是数据项大小的整数倍的内存位置上”

例如int类型占用4个字节,地址只能在0,4,8等位置上。

double类型占用8个字节,地址只能在0,8,16等位置上面

如果代码之中有特别规定的话     对齐方式以程序为主

#pragma pack(n)

如果在代码之中出现了上面的语句

那么对齐机制   为地址只能在0,n,2*n,3*n等位置上面

 #include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <windows.h>
using namespace std;
struct X1
{
int i;//4个字节
char c1;//1个字节
char c2;//1个字节
long a;//4个字节
float b;
} x1;
struct X2
{
char c1;//1个字节
int i;//4个字节
char c2;//1个字节
long a;//4个字节
float b;
} x2;
struct X3
{
char c1;//1个字节
char c2;//1个字节
int i;//4个字节
long a;//4个字节
float b;
} x3;
struct X4
{
int i;//4个字节
char c1;//1个字节
char c2;//1个字节
long a;//4个字节
float b;
} x4;
int main()
{
cout<<"long "<<sizeof(long)<<"\n";
cout<<"float "<<sizeof(float)<<"\n";
cout<<"int "<<sizeof(int)<<"\n";
cout<<"char "<<sizeof(char)<<"\n";
cout<<"x1 的大小 "<<sizeof(x1)<<"\n";
cout<<"x2 的大小 "<<sizeof(x2)<<"\n";
cout<<"x3 的大小 "<<sizeof(x3)<<"\n";
cout<<"x4 的大小 "<<sizeof(x4)<<"\n";
return ;
}
运行结果:
long
float
int
char
x1 的大小
x2 的大小
x3 的大小
x4 的大小

三个结构体   结构体中的数据都是一样的  但是结构体所占的空间不一样   这就是对齐机制对于存储的影响

C/C++ 面试-内存对齐 即不同数据类型存储空间的更多相关文章

  1. 【校招面试 之 C/C++】第3题 为什么要内存对齐?以及内存对齐的方式

    1.为什么要进行内存对? 参考:https://blog.csdn.net/a369000753/article/details/51188915 所谓内存对齐,是为了让内存存取更有效率而采用的一种编 ...

  2. C/C++: C++位域和内存对齐问题

    1. 位域: 1. 在C中,位域可以写成这样(注:位域的数据类型一律用无符号的,纪律性). struct bitmap { unsigned a : ; unsigned b : ; unsigned ...

  3. C/C++ 知识点1:内存对齐

    预备知识:基本类型占用字节 在32位操作系统和64位操作系统上,基本数据类型分别占多少字节呢? 32位操作系统: char : 1    int :4    short : 2    unsigned ...

  4. C语言再学习之内存对齐

    昨天看Q3的代码,看到有个_INTSAIZEOF的宏,着实晕了一阵.一番google后,终于明白,这个宏的作用是求出变量占用内存空间的大小,先看看_INTSAIZEOF的定义吧: #define _I ...

  5. C结构体中数据的内存对齐问题

    转自:http://www.cnblogs.com/qwcbeyond/archive/2012/05/08/2490897.html 32位机一般默认4字节对齐(32位机机器字长4字节),64位机一 ...

  6. struct内存对齐1:gcc与VC的差别

    struct内存对齐:gcc与VC的差别 内存对齐是编译器为了便于CPU快速访问而采用的一项技术,对于不同的编译器有不同的处理方法. Win32平台下的微软VC编译器在默认情况下采用如下的对齐规则:  ...

  7. C++成员变量内存对齐问题,ndk下非对齐的内存访问导致BUS_ADRALN

    同样的代码,在vs下运行正常,在android ndk下却崩溃: signal 7(SIGBUS),code 1 (BUS_ADRALN),fault addr 0xe6b82793 Func(sho ...

  8. c语言内存对齐问题

    #include <stdio.h>#pragma pack(4)struct stu{char a;short b;int c;char d;};int main(){printf(&q ...

  9. 【转】C/C++ struct/class/union内存对齐

    原文链接:http://www.cnblogs.com/Miranda-lym/p/5197805.html struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(s ...

随机推荐

  1. 关于jsp页面中name=“username”与name=“username ”的区别

    我们可以仔细的观察一下,上面的name属性都等于username,但是确实存在大同小异的差距,为什么这样说呢,因为,第二个比第一个多了一个空格,在jsp中,我曾经遇到过一个情况就是两个单选按钮用同一个 ...

  2. oracle连接出现的坑

    一.错误代码提示 请输入用户名:  SYS 输入口令: ERROR: ORA-28009: connection as SYS should be as SYSDBA or SYSOPER 二.解决方 ...

  3. about云Hadoop相关技术总结

    让你真正明白spark streaminghttp://www.aboutyun.com/forum.php?mod=viewthread&tid=21141(出处: about云开发)

  4. Go语言 - 指针 | new | make

    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. 概念 任何程序数据载入内存后,在内存都有他们的地 ...

  5. vue cli4.0 快速搭建项目详解

    搭建项目之前,请确认好你自己已经安装过node, npm, vue cli.没安装的可以参考下面的链接安装. 如何安装node? 安装好node默认已经安装好npm了,所以不用单独安装了. 如何安装v ...

  6. 了解一下Elasticsearch的基本概念

    一.前文介绍 Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的 ...

  7. SpringBoot终章(整合小型进销系统)

    在前面的章节中我们学习Spring的时候可以看到配置文件比较多,所以我们有了SpringBoot 1. 引入依赖 <dependencies> <dependency> < ...

  8. SPI总线协议理解

    1.什么是SPI: 是摩托罗拉公司设计的一种全双工通信.高速的.同步的串行外部设备通信协议. 2.SPI作用: 用于设备之间的数据交互. 3.SPI由什么构成: 1)MOSI:主设备输出从设备输入线, ...

  9. lettcode 上的几道哈希表与链表组合的数据结构题

    目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...

  10. [Gradle] 解决高德 jar 包打包到 aar 后 jar 包中的 assets 内容丢失

    问题描述 将高德 SDK 的 jar 包放到 android library project libs 目录下,发布为 aar 包后,发现高德 jar 包中的 assets 目录下的内容不见了 原因见 ...