c++中各类型数据占据的字节长度
c++中各种类型数据类型占据字节长度
首先罗列一下C++中的数据类型都有哪些:
1、整形:int、long
2、字符型:char、wchar_t
3、布尔型:bool
4、浮点型:float、double
5、指针
一、整形
int占据操作系统一个内存单元的大小。long跟int相同
早先16位操作系统一个内存单元是16位,所以是2个字节;32位系统一个内存单元是是32位,所以是4字节;64位操作系统一个内存单元是16位,故占8个字节。
二、字符型
char类型通常占据一个字节,对于用于扩展字符集的wchar_t类型,需要占据两个字节。
三、布尔型
bool占据一个字节
四、浮点型
float占据4个字节,double是float的两倍即8个字节
五、指针
指针字节长度计算原理其实跟int差不多,一个指针的位数和操作系统的位数是相等的,即32位系统应该是4个字节,64位系统应该是8个字节。
代码如下
1 #include<iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int a;
8 long b;
9 char c;
10 wchar_t d;
11 bool e;
12 float f;
13 double g;
14 int*p= &a;
15
16 cout << sizeof(a) << endl;
17 cout << sizeof(b) << endl;
18 cout << sizeof(c) << endl;
19 cout << sizeof(d) << endl;
20 cout << sizeof(e) << endl;
21 cout << sizeof(f) << endl;
22 cout << sizeof(g) << endl;
23 cout << sizeof(p) << endl;
24 }
结果如下
qqtsj@qqtsj-Nitro-AN515-:~/cpp$ g++ -o size1 size1.cpp
qqtsj@qqtsj-Nitro-AN515-:~/cpp$ ./size1 4
字节对齐,代码如下
#include<iostream> using namespace std; struct A
{
int a;
char b;
short c;
}; struct B
{
char a;
int b;
short c;
}; struct E
{
short a;
char b;
int c;
}; #pragma pack(2)
struct C
{
char a;
int b;
short c;
}; #pragma pack(1)
struct D
{
int a;
char b;
short c;
}; int main(int argc, char ** argv)
{ cout << sizeof(A) << " "<< sizeof (B) << " "<< sizeof (C) << " "<< sizeof (D) << " "<< sizeof (E) << endl;
return ;
}
~
记录一下如何理解字节对齐,结构体中总是会涉及到字节对齐,很多人都不是很理解,我也一样,今天就一起来解读他。
1.编译器对字节对齐的一些规则
我从下面三条说明了编译器对字节处理的一些原则。当然除了一些特殊的编译器在处理字节对齐的方式也不一样, 这些情况我未碰到过,就不作说明了。
| 类型 | 对齐值(字节) |
| char | 1 |
| short | 2 |
| int | 4 |
| float | 4 |
| double | 4 |
d. 类、结构及成员的有效对齐字节值。有效对齐值=min(类/结构体/成员的自身对齐字节值,指定对齐字节值)。 有效对齐值决定了数据的存放方 式,sizeof 运算符就是根据有效对齐值来计算成员大小的。简单来说, 有效对齐其实就是要求数据成员存放的地址值能被有效对齐值整除,即:地址值%有效对齐值=0
字节对齐一般默认4个字节对齐。字节分配一般以偶数分配。
32位系统默认4个字节进行对齐,64位系统默认8个字节对齐,
一个字节占8位。
例struct A
int 4个字节
char 与int 对齐,因为char分配了4个字节,short 2个字节,可以分配到char里面
因此结构体A就总共分配了8个字节。
以下的结构体都是这样分析的。
一个小白的总结
c++中各类型数据占据的字节长度的更多相关文章
- c++中各类型数据所占字节数(二)
转自:https://blog.csdn.net/allen_tony/article/details/76973906 https://blog.csdn.net/zzwdkxx/article/d ...
- c++中各类型数据所占字节数(一)
转自: https://blog.csdn.net/hi_baymax/article/details/82415896 和机器字长及编译器有关系: 所以,int,long int,short int ...
- .SQL Server中 image类型数据的比较
原文:.SQL Server中 image类型数据的比较 在SQL Server中如果你对text.ntext或者image数据类型的数据进行比较.将会提示:不能比较或排序 text.ntext 和 ...
- - Java中boolean类型占用多少个字节 MD
目录 目录 Java中boolean类型占用多少个字节 1个bit(1位) 1个Byte(1字节,8位) 4个Byte(4字节,32位) 分析 官方文档中的描述 Markdown版本笔记 我的GitH ...
- Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知
摘自:https://www.cnblogs.com/qiaogeli/p/12004962.html 程序员乔戈里 腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家 ...
- DELPHI中枚举类型数据的介绍和使用方法
在看delphi程序的时候看到aa=(a,b,c,d);这样的东西,还以为是数组,同事说是函数,呵呵,当然这两个都不屑一击,原来这样式子是在声明并付值一个枚举类型的数据.下边写下来DELPHI中枚举类 ...
- 整型变量修饰符,char类型数据存储原理,字节数,
//------------------整型变量修饰符 修饰符(int short long longlong signed unsigned)所有修饰符都是用来修整形 int 4short %hd ...
- java中不同类型的数值占用字节数
在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型.(一个字节等于8个bit) 1.整型 类型 ...
- MySQL中enum类型数据,要传入字符串
问题来源:公司业务,某张表中一个字段定义为: enum('0','1','2','3','4','5','6','7','8','9','10') NOT NULL DEFAULT '0' 某天跑脚本 ...
随机推荐
- 洛谷$P4045\ [JSOI2009]$密码 $dp$+$AC$自动机
正解:$dp$+$AC$自动机+搜索 解题报告: 传送门$QwQ$ 首先显然先建个$AC$自动机,然后考虑设$f_{i,j,k}$表示长度为$i$,现在在$AC$自动机的第$j$个位置,已经表示出来的 ...
- mysql oracle sql获取树 父级 子级 及自己
select * from ( select t.*,d.TABLE_NAME,d.QUERY_SQL,d.data_control_col,d.id table_id,d.where_sql fro ...
- MySQL插入操作
说明:value的值可以为数据,DEFAULT,NULL,expr 含有ATUO_INCREMENT的列可以插入DEFAULT.NULL,或者不插入记录来实现自动增长. 插入记录的三种方法:①可以同时 ...
- 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上
金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待! ...
- cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树
647. [Youdao2010] 有道搜索框 ★☆ 输入文件:youdao.in 输出文件:youdao.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 在有 ...
- async-await 线程分析
这里没有线程 原文地址:https://blog.stephencleary.com/2013/11/there-is-no-thread.html 前言 我是在看 C#8.0 新特性异步流时在评论里 ...
- Adobe Acrobat DC 安装
Adobe Acrobat DC 制作pdf模板 下载:http://www.downza.cn/soft/20562.html 安装出错解决: 可以将C:\Program Files (x86)\C ...
- Linux 断网安装MySQL5.x操作步骤
1.下载MySQL安装包 由于官网下载比较慢,暂时我这边采用的方法是通过网易云的centos镜像下载的地址是 http://mirrors.163.com/mysql/Downloads/MySQL- ...
- 2.Scanner的进阶使用
package com.duan.scanner; import java.util.Scanner; public class Demo04 { public static void main(St ...
- LeetCode 858 镜面反射
题目 有一个特殊的正方形房间,每面墙上都有一面镜子.除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2. 正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接 ...