博文

C++中的内存划分(2008-04-14 22:21:00)

摘要:在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。   栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。   堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。   自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。   全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。   常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多) --------------------------------------------------------------------------------------------------------- 变量和内存的问题,原来是自己理解,通过写小代码来验证,但是总感觉有什么地方不对,使我很混乱,所以今天就在网上看了一些文章,然后重新认识了这个问题。下面算是我的认识,如果有不对的地方,请指出,多多交流................ 我是新手!!!    C++中内存的分配:     1.栈:是用来存放像一般变量和函数参数等的一块内存。系统会在变量生存期结束时自动释放内存,即把内存从栈中弹出。     2.堆:用来存放动态变量,如指针。要通过设计者自己管理变量,自行进行创建和清理工作。(利用new和delete)     3.自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。     4.全局/静态存储区:全局变量和静态变量被分配到同一块内存。   &nb......

阅读全文(6230) | 评论:0

关于窗口、进程和线程的初步探讨(2008-04-13 18:48:00)

摘要:A.无窗口的线程#i nclude "stdafx.h"INT PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,  LPSTR lpszCmdParam,INT nCmdShow){ MSG message; while(GetMessage(&message,NULL,0,0)) //建立消息循环 {  TranslateMessage(&message); //翻译键盘消息  DispatchMessage(&message); //向消息处理模块发送消息 } return 0;} B.默认回调函数的窗口程序 #i nclude "stdafx.h"LRESULT CALLBACK WndProc(HWND hMainwnd, UINT message, WPARAM wParam, LPARAM lParam); HINSTANCE myhInst;//自己定义实例句柄名称!!char szAppName[]="WinAPIDemo";//应用程序名 char szAppTitle[]="利用应用程序接口的Windows应用程序";//程序标题 INT PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpszCmdParam,INT nCmdShow){ //主窗口句柄(句柄为窗口windows中的标识) HWND hMainwnd;                  WNDCLASS myWC;  //定义窗口类 {  myWC.style =CS_HREDRAW|CS_VREDRAW;  myWC.lpfnWndProc=DefWindowProc;//默认回调函数的窗口程序(窗口过程)  myWC.cbCls......

阅读全文(6996) | 评论:2

GCC 中文手册(2006-05-13 00:39:00)

摘要:GCC 中文手册 GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents     NAME gcc,g++-GNU工程的C和C++编译器(egcs-1.1.2)    总览(SYNOPSIS) gcc[option|filename ]...  g++[option|filename ]...  警告(WARNING) 本手册页内容摘自GNU C编译器的完整文档,仅限于解释选项的含义.  除非有人自愿维护,否则本手册页不再更新.如果发现手册页和软件之间有所矛盾,请查对Info文件, Info文件是权威文档.  如果我们发觉本手册页的内容由于过时而导致明显的混乱和抱怨时,我们就停止发布它.不可能有其他选择,象更新Info文件同时更新man手册,因为其他维护GNU CC的工作没有留给我们时间做这个. GNU工程认为man手册是过时产物,应该把时间用到别的地方.  如果需要完整和最新的文档,请查阅Info文件`gcc’或Using and Porting GNU CC (for version 2.0) (使用和移植GNU CC 2.0) 手册.二者均来自Texinfo原文件 gcc.texinfo.  描述(DESCRIPTION) C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定:  gcc  认为预处理后的文件(.i)是C文件,并且设定C形式的连接.  g++  认为预处理后的文件(.i)是C+......

阅读全文(13509) | 评论:0

Makefile使用初步 (2006-05-12 23:59:00)

摘要:一. 为什么使用变量   变量在makefile中用来代表一个字符串,用来表示 1. 一系列文件的名字 2. 传递给编译器的参数 3. 需要运行的程序 4. 需要查找源代码的目录 5. 你需要输出信息的目录 6. 你想做的其它事情。 说白了,这有些类似于编程语言中的宏。    二. 定义变量的方式和建议    变量的名字是大小新敏感的,从大的方面来说,makefile中的变量被分为两种,一个是用=来定义的,老外叫right-hand sides of variable,另外一种是用define关键字定义的,叫做bodies of variable。先简单说这些,后面详述。    传统上使用大写字母为变量命名,但是GNU推荐使用小写字母作为makefile内部使用的变量的名字,并用大写字母定义隐式规则中的参数或在命令行中允许用户重新定义的参数。    三. 基本的变量引用    用$(name)或${name}来引用一个变量,所以当你要表示一个$符号时,你要使用$$。当你只使用一个字母作为变量的名字时,你可以用$name来引用这个变量,不过GNU 并不推荐这样做,因为这种方式通常用来引用自动变量(Automatic Variables)。     四. 两种风格的变量定义 GNU有两种定义变量的方式,它们的不同体现在定义它们的风格和他们被展开的方式。    第一类叫做递归展开变量(Recursively Expanded Variable)。用=或define关键字都 可以定义这种变量,如果变量的定义引用了其它的变量,那么引用会一直展开下去, 直到找到被引用的变量的最新的定义,并以此作为改变量的值返回。例如: 代码: foo = $(bar) bar = $(ugh) ugh = Huh? $(foo)的值究竟是什么呢? $(foo)被展开成$(bar),$(bar)被展开成$(ugh),最终$(ugh) 被展开成“Huh?”,那么$(foo)的值就是“Huh?”这种类型的变量是所有其他make工......

阅读全文(13165) | 评论:0