大小端与栈方向

大小端?堆栈增长方向?数组增长方向? 这个问题源自某讨论课题,闲话少说,直接上代码: #include int main(int argc, char** argv) { int a[] = {('l'<<24) + ('l'<<16) + ('e'<<8) + 'h', 'o'}; printf("%x%x\n", a[0], a[1]); puts((char*)a); return 0; } 阅读详情


大小端模式和栈生长方向:
首先 栈是向下生长的 所以画栈的时候 上面是高地址 下面是地地址; 然后数据从上往下画;
大小端:
---> 大端: 是指 数据的"高位" 保存在内存的"低地址"中, 而数据的"低位" 保存在内存的"高地址"中
---> 小端: 是指 数据的"高位" 保存在内存的"高地址"中, 而数据的"低位" 保存在内存的"低地址"中
从下面的程序 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;
}


java栈都是向下生长的_把大端、小端与堆、栈的生长方向联系起来记忆 对于大端、小端的区别,可能看资料的时候确实理解了,但过段时间就搞混了;高位低地址、低位高地址、高位高地址、低位低地址...是不是看起来就好头大,哪个对应哪个啊。其实可以把大小端与堆栈联系起来记忆,虽然两者讲的不是一个粒度的,但大小端模式里高低位的存放与堆和栈的生长方向有一个共同点,它们都存在一个数据存放顺序的问题。下面结合几张图说明一下。作者: 蝉蝉请尊重作者劳动成果,转载请在标题注明“转载”字样... 阅读详情

相关推荐

银河麒麟v10-arm SEALOS离线部署k8s集群(v1.22.8)

示例 如果你想保存一个名为 "my_snapshot" 的 etcd 快照到指定的对象路径你可以使用以下命令: sealos etcd save --backupPath /root --name my_snapshot 如果文件名带时间戳:my_snapshot$(date +"%Y%m%d_%H%M%S") 会生成一个形如 20230913_143045 的时间戳。--restorePath string:指定快照恢复目录(默认为 "/opt/sealos/etcd-restore")。

xjudt的博客 3288

C语言_内存之栈、大小端

1. 栈 通常我们说的堆栈有两种形式,即: 数据结构场景下,堆与栈表示两种常用的数据结构 程序内存布局场景下,堆与栈表示两种内存管理方式 这两种栈在含义上略有不同,但是其核心思想和理念是相同的,即先进后出,如下图所示: 1.1 数据结构中的栈 具有先进后出的性质,有两种实现方式,一种是静态栈,一种是动态栈。 静态栈是一种连续储存的数据结构(...

zcc_123的博客 679

KITTI数据集下载及解析

KITTI数据集下载及解析 版本 更新时间 更新内容 作者 1 V 1.0 xxx 完成主体内容 W. Xiao 2 文章目录KITTI Dataset1 简介1.1 数据采集平台1.2 坐标系2 数据解析2.1 image文件2.2 velodyne文件2.3 calib文件2.4 label文件3 KITTI可视...

u013086672的博客 5万+

【C语言】数据存储中大小端介绍,判断大小端(实例分析)

大端小端是一种数据存储模式,我们都知道地址吧,内存中地址由低到高递增 大端(存储)模式,是指数据的低位,保存在内存的高地址中,而数据的高位,保存在内存的低地址中。小端(存储)模式,是指数据的低位,保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

tq411810317的博客 4239

图解转置卷积原理

声明:本文大部分搬运自【机器学习】详解 转置卷积 (Transpose Convolution) 感谢博主花与人间事同,本人只是在博主原创文章上做补充以及添加一些自己的理解。 1 转置卷积的背景 通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,称为上采样 (Upsample),如下图所示: 上采样方法有很多,详见【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值

laonafahaodange的博客 5685

ESP32-CAM图传小车:端边协同的嵌入式视觉系统设计

在物联网边缘智能场景中,嵌入式视觉系统需平衡实时性、算力与成本。其核心在于理解图像采集、硬件编码、低延迟传输与分层计算的基本原理——OV2640等CMOS传感器配合JPEG硬件编码可显著降低主控负载;TCP流式协议比HTTP/RTSP更适配资源受限MCU;而‘计算卸载’架构将OpenCV等重负载移至Android端,使ESP32专注实时控制与传输,既发挥FreeRTOS任务调度优势,又规避了PSRAM带宽与内存瓶颈。该模式广泛适用于教育机器人、智能巡检及DIY视觉终端等场景,本文以WiFi图传坦克小车为载体

weixin_42524864的博客 373

大端存储与小端存储

大端存储与小端存储 (1)定义 大端存储与小端存储模式主要指的是数据在计算机中存储的两种字节优先顺序。小端存储指从内存的低地址开始,先存储数据的低序字节再存高序字节;相反,大端存储指从内存的低地址开始,先存储数据的高序字节再存储数据的低序字节。 注意事项: 每一个字节中,高位在左,低位在右。 大端存储和小端存储说的是字节间的排序问题。 大端存储,高序字节在低地址中存储 小端存储,低序字节在低地址中存储 例如: 十进制数9877, ...

u011733907的博客 4805

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5682

栈增长方向与大端/小端问题

栈增长和大端/小端问题是和CPU相关的两个问题。在内存管理中,与栈对应是堆。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆盖时,称为“栈堆冲突”,系统肯定垮台。在常...

weixin_34055787的博客 252

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

weixin_42412049的博客 1015

python实现Markowitz模型 (附完整源码)

python实现Markowitz模型 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 404

堆栈中栈区的生长方向与大小端详解

内存模型中栈区与大小端问题理解

往事随风Ch的博客 1940

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

机器学习深度学习业余选手 1498

大小端与栈生长方向

为这个疑问着迷。想弄清楚,参考了http://blog.sina.com.cn/s/blog_a0e859400101279a.html。 /* * find_stack_direction.c * To find the growing direction of stack and * to recognize the pattern of data storage of the

当年小丑 746

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

处理器栈增长方向、堆区增长方向、大小端、数组在内存中地址的分配上的区别

处理器栈的增长方向是与具体的处理器有关,首先要明白,栈区是用来存储局部变量、函数参数的区域,其操作上类似于数据结构中的栈,涉及的是变量间的先后入栈,其地址是升序还是降序的问题。 大小端则指的是变量内部,具体而言是是指的多字节变量在内部字节存储地址排序问题,也是由具体的cpu架构决定。比如X86是小端模式,arm的cpu是可以设置大头还是小头的,可由操作系统自己选(一般操作系统会依赖cpu架构否则...

u011116085的博客 818

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

内存生长方向与栈生长方向

//栈生长方向,自上而下 void teststack() { int a=0; int b=0; int c=0; //&a>&b>&c printf(“&a=%p\n&b=%p\n&c=%p\n”,&a,&b,&c); } //内存生长方向与大小端 void testmem() { int a=0xaabbccdd; char* p=&a; //小端模式:数据的高字

vinnyjia的博客 1115

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

堆栈方向以及大小端存储

在程序的设计中,都会涉及都堆栈的使用,其实堆栈是指堆和栈,它们是两个不同的概念,其中堆是通过用户来调用的内存空间,需要用户主动分配和释放,如果只分配而不即使释放,则可能出现内存泄漏的问题,其结果的难以估量的;栈是系统自动调用的内存空间,系统也会根据实际情况自动去释放该空间。 在平时的使用当中,我们需要注意堆栈(这里仅指栈)的增长方向,一般来说,当堆栈指针(栈顶)由高地址...

allthebest1666的博客 368

STM32 大小端模式 与 堆栈及其增长方向分析

栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在”栈”里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size      EQU     0x00000800表示栈大小是0X800,也就是2048

明镜台 487

再识Cortex-M3之堆栈-栈方向

原文:https://blog.youkuaiyun.com/liaoxu02/article/details/48107651 嵌入式操作系统需要知道栈增长方向及大小端

jtc_88的博客 1169

STM32的栈增长和大端/小端问题是和CPU相关的两个问题

1,首先来看:栈(STACK)的问题. 函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有: Stack_Size      EQU     0x00000800 表示栈大小是0X800,也就是2048字节.这样,CPU处理

colorful technology,wonderful life!---多彩科技,技术人生! 2319

STM32堆栈和大小端问题

栈增长和大端/小端问题是和CPU相关的两个问题. 1,首先来看:栈(STACK)的问题. 函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有: Stack_Size      EQU     0x00000800 表示

遥远的她 1046

C++ -- 堆栈的分配和大小端

在 C++ 中,‌堆(Heap)‌和‌栈(Stack)‌是程序运行时内存管理的两个核心区域。理解它们的区别对于编写高效、稳定的代码至关重要。

dongyanxia1000的专栏 6103

关于STM32栈增长和大端/小端问题是和CPU相关的两个问题

1,首先来看:栈(STACK)的问题. 函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有: Stack_Size      EQU     0x00000800 表示栈大小是0X800,也就是2048字节.这样,CPU处理

阿鲁的嵌入式之路 527

数据结构与算法系列(二):关于数组,我想探讨两个问题

前言 时间与空间复杂度以后还会继续深入,目前可以先搁置一边。 ​ 数据结构与算法中,最基本的两个结构就是:数组、链表。二者最大的区别在于:数组存储地址是连续的,链表存储地址不是(完全)连续的。 ​ 数组可以说的没有多少,一是因为简单;二是因为有很多文章都讲的很详细。所以我们不再赘述,本片对数组引出的两个问题进行探讨: 栈的生长方向以及数组的偏移 大小端问题 栈的生长方向及数组偏移 引用一张 ...

weixin_33726318的博客 126

C语言构造数据类型(2)以及内存管理

cstruct 结构体名 数组名[元素个数];例如:cchar sex;int age;int score;// 定义了一个包含3个学生的数组cunion 共用体名 {数据类型1 成员变量1;数据类型2 成员变量2;...cenum 枚举名 {枚举常量1,枚举常量2,...默认情况下,第一个枚举常量的值为0,后续依次递增。

senijusene的博客 990

构造函数类型和内存管理

因为共同体所有变量使用同一空间,所以让整形等于1,判断char类型是存储1的低数据位还是高数据位判断是大端还是小端,因为在内存中地址总是由低到高,所以char类型占据int类型的第一个字节,如果1的二级制最后的0001存储char类型中,那就是低地址存储低数据位,如果是1的二进制开头的0000存储在char类型中,那就是低地址存储高数据位,是内存大端。栈区是由操作系统管理,操作系统负责对空间的申请释放,一般用于存放局部变量,执行到变量定义时开辟空间,超过变量作用域回收空间。参数:申请到的堆区空间的首地址。

2301_81357879的博客 160
上一篇: C++变量存储区
下一篇: 正则表达式
zhang_yao_wu1993
博客等级 码龄12年 0粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值