当前位置: 首页 > news >正文

拼多多怎么开店企业seo排名优化

拼多多怎么开店,企业seo排名优化,西安网站设计公司哪家好,深圳建设网站公司文章目录 1. 自动变量(auto)1.1 自动变量的初始化 2. 静态变量(static)2.1 静态变量的初始化 3. 寄存器变量(register) 1. 自动变量(auto) 在代码块内部声明的变量的缺省存储类型是…

文章目录

  • 1. 自动变量(auto)
    • 1.1 自动变量的初始化
  • 2. 静态变量(static)
    • 2.1 静态变量的初始化
  • 3. 寄存器变量(register)

1. 自动变量(auto)

代码块内部声明的变量的缺省存储类型是自动的(automatic),也就是说它存储于堆栈中,称为自动(auto)变量。关键字auto就是用于修饰这种存储类型的,但它极少使用,因为代码块中的变量在缺省情况下就是自动变量。

在程序执行到声明自动变量的代码块时,自动变量才被创建,当程序的执行流离开该代码块时,这些自动变量便自行销毁。如果该代码块被数次执行,例如一个函数被反复调用,这些自动变量每次都将重新创建。在代码块再次执行时,这些自动变量在堆栈中所占据的内存位置有可能和原先的位置相同,也可能不同。即使它们所占据的位置相同,你也不能保证这块内存同时不会有其他的用途。

因此,我们可以说自动变量在代码块执行完毕后就消失。当代码块再次执行时,它们的值一般并不是上次执行时的值

举一个例子(这个例子来自于Linux C编程一站式学习-全局变量、局部变量和作用域)

#include <stdio.h>
void foo(void)
{int i;printf("%d\n", i);i = 777; }int main(void) 
{ 	foo(); 	foo(); 	return 0; 
}

打印结果:
在这里插入图片描述
第二次调用打印的i值正是第一次调用末尾赋给i的值777?

改写一下,中间加一个打印’hello’的语句。

int main(void)
{foo();printf("hello\n");foo();return 0;
}

结果是
在这里插入图片描述
第二次调用foo打印的i值又不是777了而是0,“局部变量的存储空间在每次函数调用时分配,在函数返回时释放”

所以每一次函数的调用都是重新为自动变量分配内存的。

1.1 自动变量的初始化

自动变量的初始化需要更多的开销,因为当程序链接时还无法判断自动变量的存储位置。事实上,函数的局部变量在函数的每次调用中可能占据不同的位置。基于这个理由,自动变量没有缺省的初始值,而显式的初始化将在代码块的起始处插入一条隐式的赋值语句。这导致了:

  • 自动变量的初始化较之赋值语句效率并无提高,除了声明为const的变量之外,在声明变量的同时进行初始化和先声明后赋值只有风格之差,并无效率之别;
  • 隐式的赋值语句使自动变量在程序执行到它们所声明的函数(或代码块)时,每次都将重新初始化;(关于隐式赋值和显式赋值可以参考这个文章:关于编程语言中的显式\隐式初始化)
  • 优点:由于初始化在运行时执行,你可以用任何表达式作为初始化值;
  • 除非你对自动变量进行显式的初始化,否则当自动变量创建时,它们的值总是垃圾。

2. 静态变量(static)

变量的缺省存储类型取决于它的声明位置。凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态(static)变量

对于这类变量,无法为它们指定其他存储类型。静态变量在程序运行之前创建,在程序的整个执行期间始终存在它始终保持原先的值,除非给它赋一个不同的值或者程序结束

对于在代码块内部声明的变量,如果给它加上关键字static,可以使它的存储类型从自动变为静态。注意,修改变量的存储类型并不表示修改该变量的作用域,它仍然只能在该代码块内部按名字访问。函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归

2.1 静态变量的初始化

在静态变量的初始化中,我们可以把可执行程序文件想要初始化的值放在当程序执行时变量将会使用的位置。当可执行文件载入到内存时,这个已经保存了正确初始值的位置将赋值给那个变量完成这个任务并不需要额外的时间,也不需要额外的指令,变量将会得到正确的值如果不显式地指定其初始值,静态变量将初始化为0

3. 寄存器变量(register)

关键字register可以用于自动变量的声明,提示它们应该存储于机器的硬件寄存器而不是内存中,这类变量称为寄存器变量。通常,寄存器变量比存储于内存的变量访问起来效率更高。但是,编译器并不一定要理睬register关键字,如果有太多的变量被声明为register,它只选取前几个实际存储于寄存器中,其余的就按普通自动变量处理。如果一个编译器自己具有一套寄存器优化方 法,它也可能忽略register关键字,其依据是由编译器决定哪些变量存储于寄存器中比人脑的决定更为合理一些。

在典型情况下,你希望把使用频率最高的那些变量声明为寄存器变量。在有些计算机中,如果把指针声明为寄存器变量,程序的效率将能得到提高,尤其是那些频繁执行间接访问操作的指针。你可以把函数的形式参数声明为寄存器变量,编译器会在函数的起始位置生成指令,把这些值从堆栈复制到寄存器中。但是,完全有可能,这个优化措施所节省的时间和空间的开销还抵不上复制这几个值所用的开销。

寄存器变量的创建和销毁时间和自动变量相同,但它需要一些额外的工作。在一个使用寄存器变量的函数返回之前,这些寄存器先前存储的值必须恢复,确保调用者的寄存器变量未被破坏。许多机器使用运行时堆栈来完成这个任务。当函数开始执行时,它把需要使用的所有寄存器的内容都保存到堆栈中,当函数返回时,这些值再复制回寄存器中。

在许多机器的硬件实现中,并不为寄存器指定地址。同样,由于寄存器值的保存和恢复,某个特定的寄存器在不同的时刻所保存的值不一定相同。基于这些理由,机器并不向你提供寄存器变量的地址

http://www.zhongyajixie.com/news/7573.html

相关文章:

  • 同性恋色做视频网站阿亮seo技术顾问
  • 家具网站建设策划书百度数据分析
  • 网站开发都用什么浏览器2023年国家免费技能培训
  • 网站源码本地测试花生壳免费域名注册
  • wordpress调用文章标签seo外包资讯
  • 推广平台赚钱是真的吗林云seo博客
  • 权威的南昌网站设计做竞价推广大概多少钱
  • 新疆找人做网站多少钱谷歌seo顾问
  • 合肥做网站域名的公司制作网站费用
  • 郑州网站建设方案报价整合网络营销公司
  • 一站式网站建设行业精准的搜索引擎优化
  • 响应式网站内容布局泉州seo按天收费
  • 公司网站制作制作培训心得体会2000字
  • 淮北建网站费用关键词快速排名seo怎么优化
  • ps素材网站大全网站seo
  • 东营市报名系统网站设计公司seminar
  • 著名网站用什么语言做后台网站制作
  • 南昌网站设计制作哪里搜索引擎优化好
  • 南沙规划建设局网站微信软文
  • wordpress灰色产业seo网站编辑优化招聘
  • 园区网站建设专门开发小程序的公司
  • 网站分销系统磁力岛引擎
  • 做个网站要多少钱今日足球比赛预测推荐分析
  • html5模板网站大数据营销案例
  • 网站自然排名申请网站域名要多少钱
  • 网站制作公司电话做网站的网络公司
  • 建设网站com苏州关键词优化seo
  • 四川住房和城乡建设厅网站不能进入长沙官网seo推广
  • 至尊传奇手游官方正版下载关键词优化是怎么弄的
  • 网站建设 甲方欠款 如何处理网络推广竞价