关于栈的问题

guoyang2k 2003-08-23 06:06:26
关于栈的问题,请高手帮忙
按理说,在栈中声明一个成员变量后,栈顶指针下移,从而分配内存(地址)空间.从而我得出结论:我用常规的(非new)方法在栈中声明对象,其占用的内存空间连续。我现在要在栈中生成一个结构的数组,这个结构中成员全部为栈中对象(即没有用new生成的成员),理论上这个数组占用一(大)个连续内存区(地址).从而我可以用类似memset函数清空数组内容。最后声明一点,我的数据没大到使栈益处(32bit MS.windows.OS栈一般为64k)

我的问题是,我需要找权威,证实我的栈空间分配结论的正确性。
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2003-08-23
  • 打赏
  • 举报
回复
对于数组来说基本是可以的,不管它是在栈中还是在静态内存块中(如静态变量)。

不过有一点要注意,就是“清空”的操作的定义。如果你的数组是一个多态对象的数组,用memset去初始化它会是一种非常危险的操作。
晨星 2003-08-23
  • 打赏
  • 举报
回复
但你不要因为“用常规的(非new)方法在栈中声明对象,其占用的内存空间连续”,就企图用一个memset来清空多个变量或数组,这样做很危险,因为连续归连续,而“顺序”缺是和具体编译器的实现相关的。
所以,你所谓的“结论”也只能用来操作一个数组。而事实上,这样操作数组是不需要这么高深的结论的,:)因为数组名本来就表示一块顺序内存的首地址,这个几乎一般的书上都有吧。
晨星 2003-08-23
  • 打赏
  • 举报
回复
数组当然可以。
oopig 2003-08-23
  • 打赏
  • 举报
回复
这应该没有什么疑问,所有的c++编译器都应该保证这一点,不然数组都不能通过指针累加进行访问了。
比如这段代码,在所有符合标准的c++编译器上都应该是没有问题的:
struct record { int data;};
...
record item[10];
record *p = item;
for (int i = 0; i < 10; i++)
{
cout << p->data << endl;
p++;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧