导航:首页 > 源码编译 > 编译代码放在内存吗

编译代码放在内存吗

发布时间:2022-07-26 08:29:46

‘壹’ 程序运行时,程序代码是在堆中还是在栈中还是在内存中

在内存中。
楼上说的没错,一般计算机的内存分为好几个区域,每个区域都有自己的特殊的作用。堆栈是用来暂时存放数据和地址的。通常用来保护断点和现场。在单片机中,发生中断的时候cpu会执行中断服务程序。然而在cpu执行中断服务程序之前会先把断点地址推入堆栈,把现场的数据也推入堆栈。当执行完中断服务程序的时候,可以找到断点的地址,然后继续执行主程序。比如说我们使用计算机的时候,让计算机睡眠的时候也是先把cpu正在执行的程序压入堆栈保存起来。唤醒的时候可以很快的启动并继续执行睡眠前的服务。防止丢失数据。

‘贰’ 代码 占用内存

1.代码长会多占内存,但是不会占多少,可以忽略
2。多余函数不占内存,因为它根本没有被编译器编译,也就是说二进制文件里面根本没有这个函数的代码,在运行的时候显然不可能将不存在的东西调入代码段。
3.减小内存主要靠控制数据结构,好的数据结构和算法是根本之道

‘叁’ 请问运行时分配内存和编译时分配内存有什么区别

一。运行时分配内存
既然是运行时分配内存,首先这个一定是动态的内存。。那么它的作用是什么呢,它的主要应用场所就是在
事先并不知道要多少内存来存储我们想要存的东西,比如说
偶们现在想要用内存来保存中国深圳的人口相关信息,但是这个城市有多少人呢,这个数字是不确定的随时都是在变的,这个时候就不可能定义一个固定大小的数组来保存了,这样就需要动态内存了,来一个就加一个,少一个就减一个多好用,是不。。嘿嘿
二。编译时候分配的内存。。当然就是事先偶知道要多大的内存。所以就先申请固定大小的内存喽。这个就是在编译时候就会分配内存
三。动态的内存一经申请,只要没有人为的释放掉它,那么它会一直存在,直到程序运行结束,才会被释放。
四。。动态内存会在进程结束的时候自动释放的。。嘿嘿。。进程都没有了,那么内存何在
是不。。瓶子破了,水当然会溜走,想留下也不行啊
回复libujuan

‘肆’ 编译器在编译的时候做了什么给申明的变量分配内存

第一是将java文件编译成字节码文件 就是class文件 给jvm执行
第二就是分配常量池 就是给你代码里面的变量和方法分配空间

‘伍’ 编译时分配内存和运行时分配内存

编译其实只是一个扫描过程,进行词法语法检查,代码优化而已,编译程序越好,程序运行的时候越高效。
我想你说的“编译时分配内存”是指“编译时赋初值”,它只是形成一个文本,检查无错误,并没有分配内存空间。

当你运行时,系统才把程序导入内存。一个进程(即运行中的程序)在主要包括以下五个分区:
栈、堆、bss、data、code

代码(编译后的二进制代码)放在code区,代码中生成的各种变量、常量按不同类型分别存放在其它四个区。系统依照代码顺序执行,然后依照代码方案改变或调用数据,这就是一个程序的运行过程。

‘陆’ 一个程序编译完成后在内存中是如何存储的


如上所说,内存被分成 程序代码区、堆区、栈区 还有个全局数据区

1.程序代码区:存放你的全部代码

2.堆区:存放用new 申请的变量(如 int a = new int(5))

3.栈区;存放int = 5;之类的变量(必须放在函数中)

4.全局数据区:存放全局或静态变量,即定义在函数外的,或加上static的变量
(如:static int a = 5;)

‘柒’ 我们的代码要执行,必须先把代码放进内存里吗

是这样的,电脑开机以后,会先执行基本输入输出系统的初始化程序。以前学计算机都会听说什么rom啥的,rom里面就是固化这些基本的东西。开机以后由硬件控制,里面的东西都复制到内存(ram)中,然后还是由硬件控制,从一个固定内存地址开始执行代码。
这些代码中有一个功能就是从磁盘的指定位置读取一段程序到内存中,然后执行这段程序,

然后慢慢地就加载系统内核,加载系统,启动程序,啥啥啥

循环是有个头的,这个头就是靠硬件电路实现把代码从rom弄到ram然后cpu从ram指定地址开始执行代码

‘捌’ C语言基础问题:我们程序里定义的字符串常量都是编译后是在内存里分配还是存储在代码区

是的。只不过初始化char数组的放在栈上,初始化char*的放在rsrc区段(可以拿peid查看)。

‘玖’ java程序是在编译的时候分配空间的吗,如果不是那程序在什么时候给变量分配内存空间

编译的时候是不会分配空间的,只是将java代码编译成字节码。是在运行这段代码的时候才会分配。javac XX.java是编译代码,java XX时候是运行代码。举个简单的例子:
class Cs{
int a=1;
public void print(){
System.out.print("a="+a);
}
public static void main(String args[]){
Cs c=new Cs();
c.print();
}}
当你执行到Cs c=new Cs();的时候会初始化变量。将引用变量c放入栈内存,将变量a=1放入堆内存。

‘拾’ 关于编译过程中分配内存的问题

好吧,问题没看清楚.
他所谓的编译时候分配的内存,其实就是你exe运行前的准备工作.
这些东西操作系统也能帮你做到.
你那书是把编译和调试归为一体了,所以对于他来说,编译就会运行程序...
编译只是为了生成exe文件,而exe文件是放在硬盘上的.
所以,你重启之后exe还在,运行exe之后,才分配内存

阅读全文

与编译代码放在内存吗相关的资料

热点内容
程序员看不懂怎么办 浏览:271
linux操作系统题 浏览:765
单片机无符号数加法 浏览:227
应用隐藏加密怎么关闭 浏览:269
汽车空调的压缩机电线有什么用 浏览:429
电脑加密图片如何取消加密 浏览:340
慧净电子51单片机视频 浏览:343
javamap赋值 浏览:165
什么app可以玩掌机游戏 浏览:46
java简单聊天室 浏览:462
通用汽车编程软件 浏览:432
一级抗震框架梁箍筋加密区规定是多少 浏览:974
教你如何把安卓手机变成苹果 浏览:11
app编译分类 浏览:323
怎么用服务器的资源包 浏览:199
oa软件手机登陆服务器地址 浏览:289
androidrtp打包 浏览:723
信息被加密码了怎么办 浏览:420
弹出光盘命令 浏览:517
kdj公式源码分享 浏览:355