大小端与栈方向



大小端模式和栈生长方向:
首先 栈是向下生长的 所以画栈的时候 上面是高地址 下面是地地址; 然后数据从上往下画;
大小端:
---> 大端: 是指 数据的"高位" 保存在内存的"低地址"中, 而数据的"低位" 保存在内存的"高地址"中
---> 小端: 是指 数据的"高位" 保存在内存的"高地址"中, 而数据的"低位" 保存在内存的"低地址"中
从下面的程序 CheckAddr() 可以测试 "变量的地址"是由其地址的"低地址"决定的
从下面的程序 CheckCpuEndian() 可以测试 VS2013 是小端模式

两个变量在栈中的格局如下:
    // 高地址
12H   
34H
56H
78H   // temp1 的地址
87H
65H
43H
21H   // temp2 的地址
    // 低地址
    
// 高位先入栈 但是高位是在高地址, 低位后入栈 但是低位在低地址, 所以是小端模式

#include <iostream>
#include <cstring>

bool CheckCpuEndian()    //返回true,为小端;反之,为大端;
{
 union
 {
  unsigned int  a;
  unsigned char b;
 }c;

 c.a = 1;
 return 1 == c.b;
};

bool CheckAddr()      // 返回 true 为低地址决定 否则为高地址
{
 unsigned int a = 1;
 unsigned char b = *( &a );
 if( b == 1 )
 {
  return true;
 }
 return false;
}

int main( int argc, char *argv[] )
{
 if( CheckAddr() == true )
 {
  std::cout << "Low" << std::endl;
 }

 if( CheckCpuEndian() == true )
 {
  std::cout << "Small Endian" << std::endl;
 }

 int temp1 = 0x12345678;
 int temp2 = 0x87654321;
 
 std::cout << &temp1 << std::endl;
 std::cout << &temp2 << std::endl;

 std::cout << temp1 << std::endl;
 std::cout << temp2 << std::endl;
 std::cout << *( &temp1 - 3 ) << std::endl;

 system( "pause" );
 return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值