Memory 初学者汇编程序内存使用问题
我最近参加了一些集会,它很有趣,因为它挑战了我所学到的一切。我想问几个问题Memory 初学者汇编程序内存使用问题,memory,assembly,Memory,Assembly,我最近参加了一些集会,它很有趣,因为它挑战了我所学到的一切。我想问几个问题 运行可执行文件时,是否将整个可执行文件加载到内存中 通过一点摆弄,我发现常数并不是真正的常数?它只是一个编译器的东西吗 const int i=5 \u asm{mov i,0}//i现在为0,编译良好 那么,是否所有变量都被赋予了一个嵌入到文件中的常量值? 意思是: inta=1 const int b=2 void某物() { 常数int c=3; int d=4; } 我会在文件中找到所有这些变量吗(在十六进制编辑
const int i=5代码>
\u asm{mov i,0}
//i现在为0,编译良好
那么,是否所有变量都被赋予了一个嵌入到文件中的常量值?
意思是:
inta=1代码>
const int b=2代码>
void某物()
{
常数int c=3;
int d=4;
}
我会在文件中找到所有这些变量吗(在十六进制编辑器或其他地方)
如果将可执行文件加载到内存中,那么“常量”在技术上是否使用内存?我在网上读到很多人说常数不使用内存,这是真的吗
当可执行文件启动时,可执行文件的文本(即代码)和数据段会映射到进程的虚拟地址空间,但在访问这些内存位置之前,字节可能不会从磁盘中实际复制。看
C语言常量实际上存在于内存中,因为您必须能够获取它们的地址。(即,&i
)常量通常位于可执行映像的.rdata
段中
常数会占用内存的某个地方——如果程序中有常数42,那么内存中一定有存储42的地方,即使这意味着它存储为立即模式指令的参数
操作系统加载代码和数据段,以便为执行做好准备。
如果可执行文件有一个资源段,应用程序会根据需要加载部分资源段
确实const
变量占用内存空间,但编译器可以自由优化
用于内存使用和代码大小,并将其值嵌入代码中。
(如果它们没有检测到这些变量的任何地址引用)
const char*
aka C字符串,通常由编译器来保存内存