关于C语言硬件控制
标准:ANSCTurboC/C++3.0visualC++6.0讲的是C程序与硬件问题:1>比如初始化变量char*p="abcdefg"内存如何划分空间?2>指针也是一...
标准:ANSC Turbo C/C++ 3.0 visual C++ 6.0讲的是C程序与硬件问题:1>比如初始化变量 char *p="abcdefg" 内存如何划分空间?2>指针也是一个存放地址的变量,他的原理是由编译器决定?3>C语言如何划分内存地址?释放内存空间?4>编译器执行程序原理及计算机工作原理?5>一些细节问题:比如 int a[10],*p; 使用p++正确,则a++错误,而他们都是指针型传递函数方式? calloc建立链表与malloc建立链表的释放空间为什么不同? 给一个指针变量没有赋地址?他合时指向NULL?那个空是C语言编译系统决定好处理 还是映射物理内存也有一个空?是假空还是真空?到底C语言里有多少空? 偏僻的问题不多举例了...有非常了解的人推荐一下相关资料的书籍,网站,教程视频地址或 给我传一些相关资料?小弟非常感谢!
展开
2个回答
2014-01-05
展开全部
1.指针变量p分配在栈上,而字符串"abcdefg"分配在文字常量区。2.是的。指针也是编译器生成的数据类型,是个长整型。3.内存地址分为5块,堆区,栈区,全局(静态)数据区(分为未初始化和初始化区), 文字常量区,代码区。存储在不同区域的数据释放时间不同,存储在堆区的数据必须由程序员负责释放,用free或者是delete。而栈区的由系统自动释放。全局和静态的生存期就是整个程序运行期。4.首先,概念性错误,编译器并不执行程序,执行程序的是你的系统。编译器只是实现了高级语言向机器语言的转化而已。至于计算机的工作原理,这个概念也太泛了,有硬件层也有软件层。硬件层基本也就是80X86的汇编和内存管理,软件层也就是操作系统了,请问你想知道什么?5.a是数组名,最重要的是a是一个指针常量,你该了解了吧,常量是不能参与指针运算的,所以a++是错的。关于calloc和malloc,释放内存方面没什么区别(这个是个人观点)。关于指针变量没有初始化的问题。其实指针本身也是个长整行的变量,他存放的地址完全可以理解为4*8的整数,那么他的分配方式也跟普通的变量一样了。如果你是全局指针,那么编译器会把它自动初始化为00000000(十六进制),如果是局部指针,那么这个量就是未知的了,根据函数堆栈有不同的结果。NULL也就是内存被写成了00000000(十六进制).这个空不是说不存在,而是内存被写成了4*8=32位的全0.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-05
展开全部
关于内存管理和i/o等,都是由C语言函数库实现的,和C语言本身关系不大!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询