全局变量什么样时候在内存中申请空间呢?CPU分支预测的效率已经很高了

发表时间:2018-01-17 13:00:03 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《由授权经销商更换内存后的MBP?MacBook Pro 风扇与底盘摩擦产生周期性噪音》相关知识。本篇中小编将再为您讲解标题全局变量什么样时候在内存中申请空间呢?CPU分支预测的效率已经很高了。

①个进程不是分为代码段数据段等等吗?如果我定义①个全局变量什么时候在内存中开辟空间呢?是程序运行的时候吗?

已初始化的全局变量和局部静态变量保存在 .data 段,在文件中存在;未初始化的全局变量和局部静态变量保存在 .bss 段,因未初始化数据都是 x⓪⓪ ,保存它们无意义,所以将其放于 .bss,记录大小,为变量预留位置,在文件中不占空间,加载程序时再分配。

⋊> /tmp cat src.c#include int a = ②③③;int b;int main() { b = ①⓪②④; printf(\"%dn\", b); return ⓪;}⋊> /tmp gcc src.c⋊> /tmp objdump -s -j .data a.outa.out: 文件格式 elf⑥④-x⑧⑥-⑥④Contents of section .data: ②⓪①⓪⓪⓪ ⓪⓪⓪⓪⓪⓪⓪⓪ ⓪⓪⓪⓪⓪⓪⓪⓪ ⓪⑧①⓪②⓪⓪⓪ ⓪⓪⓪⓪⓪⓪⓪⓪ .......... ..... ②⓪①⓪①⓪ e⑨⓪⓪⓪⓪⓪⓪⋊> /tmp python -c \'print ⓪xe⑨\'②③③⋊> /tmp objdump -x -j .bss a.out...snip...节:Idx Name Size VMA LMA File off Algn ②③ .bss ⓪⓪⓪⓪⓪⓪⓪c ⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪②⓪①⓪①④ ⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪②⓪①⓪①④ ⓪⓪⓪⓪①⓪①④ ②**② ALLOC...snip...⋊> /tmp gdb ./a.outReading symbols from ./a.out...(no debugging symbols found)...done.gdb-peda$ start [----------------------------------registers-----------------------------------]RAX: ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a⓪ (: push rbp)RBX: ⓪x⓪ RCX: ⓪x⓪ RDX: ⓪x⑦fffffffddc⑧ --> ⓪x⑦fffffffe①③⓪ (\"CLUTTER_IM_MODULE=xim\")RSI: ⓪x⑦fffffffddb⑧ --> ⓪x⑦fffffffe①②⑤ (\"/tmp/a.out\")RDI: ⓪x① RBP: ⓪x⑦fffffffdcd⓪ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥d⓪ (: push r①⑤)RSP: ⓪x⑦fffffffdcd⓪ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥d⓪ (: push r①⑤)RIP: ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a④ (: mov DWORD PTR [rip+⓪x②⓪⓪⑨⑥a],⓪x④⓪⓪ # ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ )R⑧ : ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑦④⓪ (: repz ret)R⑨ : ⓪x⑦ffff⑦de⑧bd⓪ (: push rbp)R①⓪: ⓪x④ R①①: ⓪x① R①②: ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑤⑦⓪ (: xor ebp,ebp)R①③: ⓪x⑦fffffffddb⓪ --> ⓪x① R①④: ⓪x⓪ R①⑤: ⓪x⓪EFLAGS: ⓪x②④⑥ (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow)[-------------------------------------code-------------------------------------] ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥⑨b : jmp ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑤e⓪ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a⓪ : push rbp ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a① : mov rbp,rsp=> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a④ : mov DWORD PTR [rip+⓪x②⓪⓪⑨⑥a],⓪x④⓪⓪ # ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥ae : mov eax,DWORD PTR [rip+⓪x②⓪⓪⑨⑥④] # ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥b④ : mov esi,eax ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥b⑥ : lea rdi,[rip+⓪x⑨⑦] # ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑦⑤④ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥bd : mov eax,⓪x⓪[------------------------------------stack-------------------------------------]⓪⓪⓪⓪| ⓪x⑦fffffffdcd⓪ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥d⓪ (: push r①⑤)⓪⓪⓪⑧| ⓪x⑦fffffffdcd⑧ --> ⓪x⑦ffff⑦a③①③f① (: mov edi,eax)⓪⓪①⑥| ⓪x⑦fffffffdce⓪ --> ⓪x④⓪⓪⓪⓪ ⓪⓪②④| ⓪x⑦fffffffdce⑧ --> ⓪x⑦fffffffddb⑧ --> ⓪x⑦fffffffe①②⑤ (\"/tmp/a.out\")⓪⓪③②| ⓪x⑦fffffffdcf⓪ --> ⓪x①f⑦b⑨a⑧⑧⑧ ⓪⓪④⓪| ⓪x⑦fffffffdcf⑧ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a⓪ (: push rbp)⓪⓪④⑧| ⓪x⑦fffffffdd⓪⓪ --> ⓪x⓪ ⓪⓪⑤⑥| ⓪x⑦fffffffdd⓪⑧ --> ⓪x②③①dccb②ba③⑥⑦dde [------------------------------------------------------------------------------]Legend: code, data, rodata, valueTemporary breakpoint ① · ⓪x⓪⓪⓪⓪⑤⑤⑤⑤⑤⑤⑤⑤④⑥a④ in main ()gdb-peda$ p/d ⓪x④⓪⓪$① = ①⓪②④gdb-peda$ xinfo ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ --> ⓪x⓪ Virtual memory mapping:Start : ⓪x⓪⓪⓪⓪⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪⓪⓪End : ⓪x⓪⓪⓪⓪⑤⑤⑤⑤⑤⑤⑦⑤⑥⓪⓪⓪Offset: ⓪x①⑧Perm : rw-pName : /tmp/a.outgdb-peda$ x/xw ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ : ⓪x⓪⓪⓪⓪⓪⓪⓪⓪gdb-peda$ n [----------------------------------registers-----------------------------------]RAX: ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a⓪ (: push rbp)RBX: ⓪x⓪ RCX: ⓪x⓪ RDX: ⓪x⑦fffffffddc⑧ --> ⓪x⑦fffffffe①③⓪ (\"CLUTTER_IM_MODULE=xim\")RSI: ⓪x⑦fffffffddb⑧ --> ⓪x⑦fffffffe①②⑤ (\"/tmp/a.out\")RDI: ⓪x① RBP: ⓪x⑦fffffffdcd⓪ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥d⓪ (: push r①⑤)RSP: ⓪x⑦fffffffdcd⓪ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥d⓪ (: push r①⑤)RIP: ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥ae (: mov eax,DWORD PTR [rip+⓪x②⓪⓪⑨⑥④] # ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ )R⑧ : ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑦④⓪ (: repz ret)R⑨ : ⓪x⑦ffff⑦de⑧bd⓪ (: push rbp)R①⓪: ⓪x④ R①①: ⓪x① R①②: ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑤⑦⓪ (: xor ebp,ebp)R①③: ⓪x⑦fffffffddb⓪ --> ⓪x① R①④: ⓪x⓪ R①⑤: ⓪x⓪EFLAGS: ⓪x②④⑥ (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow)[-------------------------------------code-------------------------------------] ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a⓪ : push rbp ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a① : mov rbp,rsp ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a④ : mov DWORD PTR [rip+⓪x②⓪⓪⑨⑥a],⓪x④⓪⓪ # ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ => ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥ae : mov eax,DWORD PTR [rip+⓪x②⓪⓪⑨⑥④] # ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥b④ : mov esi,eax ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥b⑥ : lea rdi,[rip+⓪x⑨⑦] # ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑦⑤④ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥bd : mov eax,⓪x⓪ ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥c② : call ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑤⑥⓪[------------------------------------stack-------------------------------------]⓪⓪⓪⓪| ⓪x⑦fffffffdcd⓪ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥d⓪ (: push r①⑤)⓪⓪⓪⑧| ⓪x⑦fffffffdcd⑧ --> ⓪x⑦ffff⑦a③①③f① (: mov edi,eax)⓪⓪①⑥| ⓪x⑦fffffffdce⓪ --> ⓪x④⓪⓪⓪⓪ ⓪⓪②④| ⓪x⑦fffffffdce⑧ --> ⓪x⑦fffffffddb⑧ --> ⓪x⑦fffffffe①②⑤ (\"/tmp/a.out\")⓪⓪③②| ⓪x⑦fffffffdcf⓪ --> ⓪x①f⑦b⑨a⑧⑧⑧ ⓪⓪④⓪| ⓪x⑦fffffffdcf⑧ --> ⓪x⑤⑤⑤⑤⑤⑤⑤⑤④⑥a⓪ (: push rbp)⓪⓪④⑧| ⓪x⑦fffffffdd⓪⓪ --> ⓪x⓪ ⓪⓪⑤⑥| ⓪x⑦fffffffdd⓪⑧ --> ⓪x②③①dccb②ba③⑥⑦dde [------------------------------------------------------------------------------]Legend: code, data, rodata, value⓪x⓪⓪⓪⓪⑤⑤⑤⑤⑤⑤⑤⑤④⑥ae in main ()gdb-peda$ x/xw ⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧⓪x⑤⑤⑤⑤⑤⑤⑦⑤⑤⓪①⑧ : ⓪x⓪⓪⓪⓪⓪④⓪⓪

推荐阅读:《程序员的自我修养》

编后语:关于《全局变量什么样时候在内存中申请空间呢?CPU分支预测的效率已经很高了》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《MacBook 2015款的内存咋会是ddr2?普通的英文系大学生MacBook air和pro如何选择》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题