社区
C语言
帖子详情
静态数组堆栈中的内存地址对齐问题
fengxiaoke_fxk
2012-04-30 04:37:34
在实现静态int数组堆栈时,如果取得了内存中的这么一块内存,地址从2000到3000,那么数组中0~n-1个下标对应的元素是0对应2000~2004,1对2005~2008。。。这样依次下去呢还是0对应2997~3000,1对应2993~2996这样反着来?
那个先进后出是怎么回事?是说第一个输入的占0,第二个输入占1.。。。还是反着来?
...全文
242
7
打赏
收藏
静态数组堆栈中的内存地址对齐问题
在实现静态int数组堆栈时,如果取得了内存中的这么一块内存,地址从2000到3000,那么数组中0~n-1个下标对应的元素是0对应2000~2004,1对2005~2008。。。这样依次下去呢还是0对应2997~3000,1对应2993~2996这样反着来? 那个先进后出是怎么回事?是说第一个输入的占0,第二个输入占1.。。。还是反着来?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fengxiaoke_fxk
2012-05-01
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
(gdb) p &a
$1 = (int (*)[10]) 0xbfffefd0
(gdb) x/40b a
0xbfffefd0: 1 0 0 0 2 0 0 0
0xbfffefd8: 3 0 0 0 4 0 ……
[/Quote]
懂了,OK
jiligululalala
2012-04-30
打赏
举报
回复
(gdb) p &a
$1 = (int (*)[10]) 0xbfffefd0
(gdb) x/40b a
0xbfffefd0: 1 0 0 0 2 0 0 0
0xbfffefd8: 3 0 0 0 4 0 0 0
0xbfffefe0: 5 0 0 0 6 0 0 0
0xbfffefe8: 7 0 0 0 8 0 0 0
0xbfffeff0: 9 0 0 0 10 0 0 0
fengxiaoke_fxk
2012-04-30
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
int a[10] = {1,2,3,4,5,6,7,8,9,10}
定义了一个数组,且10个元素都赋值了
(gdb) p &a
$2 = (int (*)[10]) 0xbfffefd0
p &a这条命令,打印出数组a的地址
(gdb) x/20 &a
0xbfffefd0: 0x00000001 0x00000002 0x00000003 0x0……
[/Quote]
我想问的是0和哪一个地址对齐,是0x00000001还是0x0000000a
夏天__
2012-04-30
打赏
举报
回复
楼上说的很正确.
解释的很到位、
jiligululalala
2012-04-30
打赏
举报
回复
int a[10] = {1,2,3,4,5,6,7,8,9,10}
定义了一个数组,且10个元素都赋值了
(gdb) p &a
$2 = (int (*)[10]) 0xbfffefd0
p &a这条命令,打印出数组a的地址
(gdb) x/20 &a
0xbfffefd0: 0x00000001 0x00000002 0x00000003 0x00000004
0xbfffefe0: 0x00000005 0x00000006 0x00000007 0x00000008
0xbfffeff0: 0x00000009 0x0000000a
x/20 &a 显示内存中数组a地址中的内容,也就是初始化的那些数字1~10
fengxiaoke_fxk
2012-04-30
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
Temporary breakpoint 2, main () at arr.c:5
5 int a[10] = {1,2,3,4,5,6,7,8,9,10};
(gdb) s
7 return 0;
(gdb) p &a
$2 = (int (*)[10]) 0xbfffefd0
(gdb) x/20 &a
0……
[/Quote]
我还没开始学习gdb,你能不能加点注释,解释清楚一点
jiligululalala
2012-04-30
打赏
举报
回复
Temporary breakpoint 2, main () at arr.c:5
5 int a[10] = {1,2,3,4,5,6,7,8,9,10};
(gdb) s
7 return 0;
(gdb) p &a
$2 = (int (*)[10]) 0xbfffefd0
(gdb) x/20 &a
0xbfffefd0: 0x00000001 0x00000002 0x00000003 0x00000004
0xbfffefe0: 0x00000005 0x00000006 0x00000007 0x00000008
0xbfffeff0: 0x00000009 0x0000000a
C语言基础---6.动态
数组
和
静态
数组
详解---入门
文章目录0.堆 & 栈1.
静态
数组
2.动态
数组
3.错误用法集锦:1.
数组
的大小,需要使用常量定义,否者报错2.动态
数组
的大小,需要用指针接收3.
静态
数组
在函数
中
:无法传递参数给零一个函数4.动态
数组
:可以做为参数传递给其他函数 0.堆 & 栈 内存分配有如下三种形式: 从
静态
存储区域分配:它是由编译器自动分配和释放的,即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与 static 变量。 在栈上分配:它同样也是由编译器自
关于
堆栈
问题
的一些总结
文章目录
堆栈
溢出为什么栈向下生长,堆向上增长?
堆栈
区别
堆栈
溢出 栈溢出:创建进程时,会分配一个2M的栈空间,当递归函数调用过多时就会导致栈溢出 堆溢出:实际上与栈溢出同理(都是因为向一个固定大小的空间
中
,分配了过多的数据),因为操作系统给每个进程分配的最大堆的空间就是4G,当超出这个上限时就会发生堆溢出(比如说创建一个过大的
数组
) 如何解决递归函数引起的栈溢出? 使用尾递归,尾递归就是return时调用函数本身 T func(num_1,num_2){ if(num_1 == 2)
堆栈
和
静态
存储区
学习面向对象ing
STM32
堆栈
详解
文章目录写在开头
堆栈
区分析
堆栈
解释堆和栈的区别STM32的分区STM32的内存内存概述更新时间2020/10/20 写在开头 代码编译后提示信息可以看到的内容 1、Code :是代码占用的空间,存储到flash【Rom】
中
的程序代码 2、RO-data:是 Read Only 只读常量的大小,如const型。用来存储程序的指令和常量,保存在ROM
中
。 3、RW-data:是(Read Write) RW是可读可写变量,就是初始化时候就已经赋值了的,RW + ZI就是你的程序总共使用的RAM字节数。 4、
再次理解STM32
中
的
堆栈
机制
STM32
中
的
堆栈
在启动文件
中
有初始设置,也可以根据需求调整大小,不同的类型的变量也会存储在内存的不同区域。因此,深入理解STM32
中
的
堆栈
机制,对于合理使用内存,以及更高效的内存管理至关重要。 本文针对不同类型变量在内存
中
的存储位置,以及如何调整
堆栈
大小做了简单介绍。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章