社区
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.。。。还是反着来?
...全文
236
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.动态
数组
和
静态
数组
详解---入门
本文深入探讨了
堆栈
内存分配机制及其与
数组
的关系,详细解释了
静态
数组
与动态
数组
的区别,包括它们的分配方式、效率、申请大小限制及存储内容等关键信息。
关于
堆栈
问题
的一些总结
本文探讨了
堆栈
溢出的
问题
,解释了栈向下生长、堆向上增长的原因,以及
堆栈
在空间大小、内存碎片、生长方向和分配方式上的主要区别。
堆栈
溢出可通过优化递归,如使用尾递归来解决。了解这些基础知识对于理解和避免内存管理
问题
至关重要。
堆栈
和
静态
存储区
文章详细介绍了C#
中
的内存区域,包括
堆栈
和
静态
存储区,以及值类型和引用类型的概念和内存存储方式。此外,还讨论了构造函数的自动生成,对象的创建以及字符串在内存
中
的存储方式。文章进一步阐述了继承的概念,展示了继承的代码示例,并解释了虚方法和隐藏方法在继承
中
的作用。最后,提到了垃圾回收机制以及引用赋值的
问题
。
堆栈
大小不够导致的stack overflow
问题
分析
同事提供的dll库测试运行时出现栈溢出错误。经分析,是接口代码
中
结构体过大,超过了vs编译器默认的
堆栈
空间大小。文
中
介绍了C/C++编译程序占用内存的几个部分,如栈区、堆区、全局区。还给出了解决方案,包括修改编译器
堆栈
大小、将变量设为
静态
、在堆上创建
数组
/结构体。
STM32
堆栈
详解
本文详细解析STM32
中
的内存管理,包括ROM与RAM的使用情况、
堆栈
的区别及应用,以及如何合理分配
堆栈
空间确保系统稳定运行。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章