关于Linux C程序存储空间的逻辑布局
Linux C程序存储空间的逻辑布局是怎么样的?为了方便大家,下面本站小编为大家整理了关于Linux C程序存储空间的逻辑布局的文章,希望对你有所帮助。
一、APUE上指出了 Linux C程序存储空间的'逻辑布局,对于 X86上的Linux
正文段从 0x08048000单元开始
栈底则在 0xC0000000之下开始 (栈从高地址向低地址生长)
图如下:
二、例程
实现一个函数f(),不用指针,实现在函数内修改传入参数的值。
#include "stdio.h"
#include "sys/types.h"
void f1(u_int32_t a)
{
printf("%pn", &a);
u_int8_t *ap = (u_int8_t *)&a;
while(++ap)
{
printf("%pn", ap);
if( *ap == a)
{
*ap = 7;
break;
}
}
}
main()
{
u_int32_t i = 123;
printf("%pn", &i);
f1(i);
printf("%dn", i);
}
运行结果
/* * * result * * */
/*
BTC:/home/leon/test # ./
0xbf905300
0xbf9052e0
0xbf9052e1
0xbf9052e2
0xbf9052e3
0xbf9052e4
0xbf9052e5
0xbf9052e6
0xbf9052e7
0xbf9052e8
0xbf9052e9
0xbf9052ea
0xbf9052eb
0xbf9052ec
0xbf9052ed
0xbf9052ee
0xbf9052ef
0xbf9052f0
0xbf9052f1
0xbf9052f2
0xbf9052f3
0xbf9052f4
0xbf9052f5
0xbf9052f6
0xbf9052f7
0xbf9052f8
0xbf9052f9
0xbf9052fa
0xbf9052fb
0xbf9052fc
0xbf9052fd
0xbf9052fe
0xbf9052ff
0xbf905300
7
*/
从结果可以清晰的看到:
1 进入函数f1()后,栈“向下”生长了。
2 通过直接访问栈内容,修改了栈内的值。
注:这种操作相当不安全,因为不能保证栈内没有其它相同的值。
-
2016年计算机二级考试必练习题及答案
1.在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是()A.逻辑设计B.需求分析C.详细设计D.物理设计2.对序线性表(23,29,34,55,60,70,78)用二分法查找值为60的元素时,需要比较次数为()A.1B.2C.3D.43.下列描述中,正确的是()A.线性链表是线性表的链式存储结构B...
-
2017年计算机等级MSOffice考试试题附答案
计算机网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。下面是小编整理的关于计算机等级MSOffice考试试题附答案,欢迎大家参考!(1)计算机可分为按性能可以分为超级计算机、大型计算机、小型计算机、微型计算机和A)服务器B)掌中设...
-
2017年关于msoffice一级考试题及答案
《计算机应用》月刊,于1981年创刊,由中国科学院成都计算机应用研究所主办,是国内较早公开发行的计算机技术刊物,在计算机自动化领域有较大影响。下面是小编整理的关于msoffice一级考试题及答案,欢迎大家参考!一、选择题1).486微机的字长是A.8位B.16位C.32位D.64位正...
-
J2EE学习技巧
第一步:学习java基本语法,慢慢熟悉面向对象的编程理念(封装、继承和多态)封装和集成比较好理解,搞清楚多态可能要费点功夫,这只是j2ee学习过程中的第一步。第二步:学习JSP相关知识,掌握JSP代码、JSP指令、JSP动作,同时也要学一些servlet、XML方面的知识,JSP相比于后面...