2013年12月26日

c/c++内存机制(转)

摘要: c/c++内存机制(一)(转)一:C语言中的内存机制在C语言中,内存主要分为如下5个存储区:(1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效。(2)堆(Heap):由程序员用malloc/calloc/realloc分配,free释放。如果程序员忘记free了,则会造成内存泄露,程序结束时该片内存会由OS回收。(3)全局区/静态区(Global Static Area):全局变量和静态变量存放区,程序一经编译好,该区域便存在。并且在C语言中初始化的全局变量和静态变量和未初始化的放在相邻的两个区域(在C++中,由于全局变量和静态变量编译器会 阅读全文

posted @ 2013-12-26 13:40 google_yep 阅读(1182) 评论(0) 推荐(0) 编辑

delete this

摘要: In order to understand "delete this" :First Step------dive into "delete p"delete p 执行了哪两个步骤?delete p 是一个两步的过程:调用析构函数,然后释放内存。delete p产生的代码看上去是这样的(假设是Fred*类型的):// 原始码:delete p;if (p != NULL){ p->~Fred(); operator delete(p);}p->~Fred() 语句调用 p 指向的Fred 对象的析构函数。operator delete(p) 阅读全文

posted @ 2013-12-26 13:36 google_yep 阅读(285) 评论(0) 推荐(0) 编辑

函数返回 局部变量问题

摘要: #include#includechar*get_str(void){char*str="abcd";returnstr;}intmain(intargc,char*argv[]){char*p=get_str();printf("%s/n",p);return0;}上述代码中,str是局部变量,函数返回后应该释放掉了,但为什么get_str返回后,还能正常输出呢?char *str="abcd"; 这种方式内存分配在静态存储区,str指向"abcd"这一字符串常量,get_str()函数返回指向这一字符串常量的地 阅读全文

posted @ 2013-12-26 10:52 google_yep 阅读(375) 评论(0) 推荐(0) 编辑

导航