Linux下的内存分配
来源:互联网 发布:淘宝等级贷款 编辑:程序博客网 时间:2024/05/17 05:10
在空间中的内存分配如图所示
通过以下程序可以更加清晰的看出地址之间的联系:
<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#include <stdio.h></span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> add(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> a, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> const e){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> c; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> d = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; static f = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; c = a + e; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"local(null) &c = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, &c); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"local(eval) &d = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, &d); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"const e = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, &e); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"static &f = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, &f); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> c;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main(void){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> a = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> b; char str1[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>] = {<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"hello"</span>}; char str2[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"allover(eval) &a = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, &a); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"allover(null) &b = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, &b); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"array(eval) &str1 = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, str1); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"array(null) &str2 = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%p</span>\n"</span>, str2); b = add(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul>
执行结果如下所示
<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">allover(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">eval</span>) &a = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf803820</span>allover(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) &b = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf80381c</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">array</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">eval</span>) &str1 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf803812</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">array</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) &str2 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf803808</span>local(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) &c = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf8037e4</span>local(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">eval</span>) &d = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf8037e0</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> e = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xbf8037f4</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> &f = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x8049714</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
由此可知全局变量里,不论是一般变量,还是数组,为定义的保存在bss段,而定义的保存在之后的.data段里。
局部变量就全部保存在栈空间,在数据堆之上。
static修饰的变量全部保存在.data段。
const修饰的在一定程度上属于只读常量,所以存在rodata段。
0 0
- Linux下的内存分配
- Linux下的内存分配
- Linux下的内存分配方式简述
- Linux下 Weblogic内存分配
- linux下分配G级物理内存的方法-alloc_bootmem()
- windos下的内存分配
- 关于linux的内存分配
- Linux 内存的延迟分配
- Unix/Linux的内存分配
- Linux C 的内存分配
- Linux系统的内存分配
- Linux下内存分配与映射之一
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- 内存对齐的初步讲解--linux和windows平台下内存分配的差异
- 浅谈内存对齐--linux和windows平台下内存分配的差异
- .NET下的内存分配机制
- win32下的内存分配失败原因
- kali linux metasploit的web渗透测试(一)
- Android JNI 开发
- socket 实现最小化组播(多播)程序
- nim博弈2: hiho1172
- 宅男宅女福利--智能聊天(一)
- Linux下的内存分配
- 信号处理与信号产生电路引言
- jquery刷新页面
- 如何判断论文真正被EI收录? 国际会议都会EI检索吗?IEEE的国际会议,EI数据库核心
- week8(第二波搜索进阶) A -hdu 2553 N皇后问题
- PHP DOM创建生成一个XML文件
- React native的一点浅见
- label {树形dp+机智的优化}
- HDU 1133 Buy the Ticket