帮助解释两类变量的区别

vcgaoshou 2012-08-23 12:23:15
帮助解释两类变量的区别
.....
{
int *p=new int;
int i;
}
.....
书上说p所指的内存是运行到 new int 时动态分配的,i的内存是编译时分配的。
我的问题是,程序退出{ },i不是不存在了吗,当再次进入{ }时由系统再次定义i,即再次分配i内存,这些工作不是在运行时完成的吗?
我的问题是i变量的内存空间究竟是编译时,还是运行时分配的,和*p的内存区域本质的不同在哪里(我知道i,*p占用不同的内存区域,生命期也不相同)。
...全文
74 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandals 2012-08-23
  • 打赏
  • 举报
回复
i, p分配在栈上,栈由编译器管理自动释放和分配资源。
*p是分配在堆上,堆上的内存由程序员自己管理。

实际上都是在运行的时候分配。
xcyl 2012-08-23
  • 打赏
  • 举报
回复
都是运行时分配的
冻结 2012-08-23
  • 打赏
  • 举报
回复
都是运行时分配的,编译成一个可执行文件,放在硬盘里,不运行,怎么为它分配内存。
dhdahai 2012-08-23
  • 打赏
  • 举报
回复
i---归编译器管
*p---归程序员管
恨天低 2012-08-23
  • 打赏
  • 举报
回复
i又不是静态变量,全局变量,怎么会在编译的时候分配内存呢?
它属于自动变量,运行的时候在栈上分配空间。
赵4老师 2012-08-23
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
赵4老师 2012-08-23
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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