C语言—数据在内存中的存储

我们今天以整型来叙述,常见的整型有int(4个字节)、short(2个字节)、long(在32位下4个字节)、long long (8个字节)。首先我们说明32位与64位的区别。32位代表有32个地址线,也就是可以处理2的32次方那么大的数字。表示内存共有2^32个地址。每一个地址可以存储一个字节。所以32位系统最大可支持的内存大小=2的32次方/1024/1024=4096MB 就等于4GB


在我们内存地址之中,是用16进制存储的,0-15前9个数为0-9,从10-15分别为a,b,c,d,e,f 。我们都知道一个字节由八个二进制位构成,所以一个整型是4个字节由32个二进制位构成,1个字节等于8个二进制位。 f是在二进制位下的1111,由此我们可知道2个16进制位等于1个字节。


我们把a和b的地址存储到内存之中(这里我们用的编译器是VS2019),来思考在内存之中是不是随机分配的

int a = 0x11223344;
int b = 0x22334455;

在这里插入图片描述

这里我们发现,似乎a的地址是反着存储的,我们明明给的a是11223344,这是为什么呢。
首先我们要知道什么是低位和高位。
例如一个十进制数字123 3就是低位 1就是他的高位
再例如一个字节的二进制位 1000 0001 最左边的1就是高位 右边的1就是低位


在想探讨这些之前我们还得知道什么是小端存储和大端存储。
小端存储模式:数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
大端存储模式:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。

由我们上面的图发现不仅a的地址是连续被存储进去的,而且低位44正好存放在最低的地址当中,由此我们能知道vs2019是一个小端存储的模式。


在这里插入图片描述
而我们b的地址也是证实了是用小端存储的模式,而我们还发现b的起始地址(0x00EFFDAC)比a的起始地址(0x00EFFDB8)还要低。所以我们在定义一个变量的时候,内存是会优先使用高地址。


这里我们有一道例题

请简述大端字节存储和小端字节存储的概念,设计一个小程序来判断当前机器的存储。

这里我们的思路是我们假设为a开辟的字节地址是0x11223344
在这里插入图片描述
我们只对比第一个字节,如果我们拿出来发现是44那么就证明是小端字节存储,拿出来11那么就是大端存储。

所以我们的思路是定义一个int a = 1
在这里插入图片描述
拿出来第一个是01那么就证明是小端存储,00那么就是大端存储。所以我们只需要拿出第一个字节就行,

代码如下:

int check_sys()  //判断大小端
{
	int a = 1;
	char* p = (char*)&a;

	if (*p == 1)
		return 1;
	else
		return 0;
}
int main()
{
	if (check_sys() == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

总结
1.在定义局部变量时候内存是优先使用高地址再使用低地址
2.在Visual Studio编译环境下,当一个变量获得一块内存空间后,变量的低位从内存的低地址开始存储(小端字存储)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值