想请教一个问题,C程序中如果申明了一个结构体类型,当执行程序时,声明部分会存在于内存代码段中么?

lkcool7 2016-07-23 10:21:34
虽然书上说的C程序,只有在定义结构体变量的时候,才在堆区或栈区分配内存,,,但是结构体类型的声明信息很重要啊,程序执行时会真的不存在于内存当中么?如果不存在,电脑怎么知道要定义的结构体变量是什么样子的。 还望各位朋友,帮我解决一下心中的疑惑,谢谢!
...全文
413 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang0635 2016-07-23
  • 打赏
  • 举报
回复
不在内存中。编译器根据这些东西生成了只处理地址、数据的机器语言代码,这些代码在内存中,存储数据的变量位于内存中,其余的都用不到了。
paschen 2016-07-23
  • 打赏
  • 举报
回复
编译器编译后已经全变成了二进制数据,没有类型这些的概念了 如果硬要说存去哪了,只能说当你定义变量时的机器指令会有所不同
flying_music 2016-07-23
  • 打赏
  • 举报
回复
结构体的定义会存在于内存的代码段的,但不会出现在堆区或者栈区,只有定义结构体变量是才会根据代码段的结构体定义信息在栈上或者堆上分配内存
lm_whales 2016-07-23
  • 打赏
  • 举报
回复
调试版本,可能会有类型相关信息的 发布版本,一般不会有 当然,VC有一个部分,可能会有。这就是托管C++ 这其实是另一种语言了,不是很符合C++的定义 类型的信息这些东西,对于编译好的程序。并不是运行时候必须的东西,并不很重要、 只有像调试代码等场合,可能会用到。 类型系统,只是对于高级语言,对于人来说,是重要的。 对编译后的代码。完全是不必要的。 汇编语言,只有整型,浮点型,指针其实是某种整型 结构,数组都是可有可无的,一样可以编写程序
lkcool7 2016-07-23
  • 打赏
  • 举报
回复
引用 3 楼 wang0635 的回复:
不在内存中。编译器根据这些东西生成了只处理地址、数据的机器语言代码,这些代码在内存中,存储数据的变量位于内存中,其余的都用不到了。
我有点不明白,前面说到不在内存中,后面又说在内存中,还请再讲解一下,谢谢。
lkcool7 2016-07-23
  • 打赏
  • 举报
回复
引用 3 楼 wang0635 的回复:
不在内存中。编译器根据这些东西生成了只处理地址、数据的机器语言代码,这些代码在内存中,存储数据的变量位于内存中,其余的都用不到了。
引用 2 楼 paschen 的回复:
编译器编译后已经全变成了二进制数据,没有类型这些的概念了 如果硬要说存去哪了,只能说当你定义变量时的机器指令会有所不同
我能理解成这样理解么,在定义了一个结构体类型后,定义结构体类型的这部分代码会被编译器编译成机器代码,和程序其他代码一起放到一个可执行文件中去,在运行个程序时,整个可执行文件会被加载到内存中,只是从结构体类型定义语句转换过来的那部分代码不会被执行,而是而是让计算机多了一种可以定义结构体的指令。 还请多多指教
lkcool7 2016-07-23
  • 打赏
  • 举报
回复
引用 1 楼 cyfcsd 的回复:
结构体的定义会存在于内存的代码段的,但不会出现在堆区或者栈区,只有定义结构体变量是才会根据代码段的结构体定义信息在栈上或者堆上分配内存
你说的结构体定义存在于内存的代码段的,就是指结构体申明的那段代码?
GG_bang 2016-07-23
  • 打赏
  • 举报
回复
声明结构体类型,它的本质和内置类型如int,char等一样,是一种数据类型,不过是用户自己自定义的,用来满足那些内置类型不能满足需求的时候,你认为int, char等数据类型会在内存中开辟空间吗?只有在用类型定义变量的时候才会在内存中开辟空间,存储这个变量对应的值,它就是提供了一个模子,告诉编译器这种类型有多大,定义的时候需要开辟多大的空间。

69,336

社区成员

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

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