揭秘代码效率
存储在哪类内存,取决于开发者声明它们的方式。如果数据不连续,分成无数段分散在内存中,会降低数据的Cache命中率。因此,理解变量如何存储非常重要。 栈空间 栈空间,通常用于存储局部变量、函数参数、函数返回地址、函数返回前需要恢复的寄存器等。每次调用函数时,系统都会分配一段栈空间,用于存储这些东西,函数返回时,这段栈空间会被回收,下次调用函数时,程序还可以重用这段栈空间。 一般来说,程序每个线程有固定大小的栈空间,使用多少,回收多少,只是偏移量偏移多少的问题。栈空间特别高效是因为同一段内存空间可以被反复使用,内存很容易就加载到Cache中,Cache命中率更高。 我们可以多利用栈空间。所有的变量,最好都在使用它们的函数中声明。有些情况下可以在大括号{ }内声明变量,尽可能缩小变量的作用域。 全局或静态空间 全局变量,任何函数都可以访问,存储在内存的静态空间中。static关键字声明的变量、浮点常量、字符串常量、虚函数表等,都存储在静态空间中。 静态空间的优点是,可以在程序启动前就将其初始化为所需的值。缺点是,即使变量只使用一次,或者只在程序的一小部分中使用,它的内存,也会在程序整个运行过程中被占用,会降低Cache的效率。 尽量不要将变量声明为全局变量,一个变量如果被多个函数使用,可以考虑将其作为参数,但是参数传递是有开销的,如果我们想避免这类开销,难道就要声明为全局变量了吗?其实我们也可将变量存储在类对象中,多个函数都访问类对象中的变量成员。
某些情况下,可以考虑static和const共用,例如声明一个静态常量查询表: (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |