程序优化为何没有说明”变量名长度”

网上有着不少常见的程序优化点的文章,比如PHP中使用单引号、双引号的性能差别等等。

但这其中并没有说到”变量名长度”会影响性能,那么它为什么不会影响性能呢,就需要引入我们今天要讲的这篇文章的知识了。

编译过程内存地址

我们的程序代码在运行的时候(或者之前)需要先经过编译器的处理,编译成更为底层的代码。

编译时是不分配内存的。此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确。所以声明是给编译器看的。变量名在编译过后的程序中是以内存地址存在的。所以它的长度不会影响程序性能,只会占用你的代码文件大小(基本可以忽略)

引用一下文献说明

接下来,汇编器会将汇编代码转换为二进制目标代码文件。目标代码文件是机器代码的一种形式,它包含所有指令的二进制表现,但是还没有填入全局值的地址。

原文博客

地址

程序如何确认内存地址

我们都知道,所有内存数据都是储存在我们硬件内存条上面的,那么它的空间是固定的,并且某个位置被占用的时候,应该是不能被其他程序使用的,否则将会内存冲突。

(一个空教室,小明已经坐了一个位置,其他同学不能坐在他大腿上了诶)

物理内存地址

上面这个概念就是物理内存地址,描述说明在硬件中实际的储存位置(好比 二排三列)

逻辑内存地址

那么我们的程序在编译完成之后,怎么确定它在运行时到底使用哪一块内存地址呢?

使用的是相对的逻辑内存地址。

比如我们有以下一份PHP代码

<?php
$a = 1;
$b = 3;

那么编译后的程序可能如下(用文字描述)

Location = 向系统申请内存地址,并返回物理内存地址

申请一块内存,储存代码$a的值,对应的物理内存地址为 ·Location + 1·
申请一块内存,储存代码$b的值,对应的物理内存地址为 ·Location + 1 + 1·

这里用1来代表一个变量需要占用的大小(仅仅为了说明,每个语言的数据结构不同)

这就是相对的逻辑内存地址了。