雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年11月24日

摘要: 之前写了一篇堆栈的,这里再补充下内存其他的区域1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放 , 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS)。 - 程序结束后由系统释放 4、文字常量区 — 常量字符串就是放在这里的。 程序结束后由系统释放 阅读全文

posted @ 2013-11-24 16:38 huhuuu 阅读(11236) 评论(2) 推荐(3) 编辑

摘要: 先观察一下的代码:#includeint main(){ const int i=1; int y; int *pi=(int*)&i; *pi=2; y=*pi; int tempi; tempi=i; printf("i=%d\n",i); printf("tempi=%d\n",tempi); printf("y=%d\n",y);}输出的是i=1tempi=1y=2观察内存在执行完*pi=2后i被神奇的修改了,但是tempi=i 后 tempi 依旧1这时观察汇编你惊奇地发现,在编译成汇编的时候,temp=i 压根就没 阅读全文

posted @ 2013-11-24 11:14 huhuuu 阅读(1794) 评论(2) 推荐(0) 编辑

摘要: 1.动机:前段时间,一直有个疑问,就是编译器是从哪里知道数据的类型的,数据的类型是存在内存里面的么,因为自己调试编译器,发现内存中并没有多余的数据,后来在群上发问,才知道数据在编译成汇编的过程就知道数据的类型了,也就是数据的类型识别时在内存代码区里 观察代码#include#includestruct data{ short a; long b; long long c; float e; double f; double g; bool h; char i;};int main(){ data temp; temp.a... 阅读全文

posted @ 2013-11-24 10:26 huhuuu 阅读(911) 评论(0) 推荐(0) 编辑