본문 바로가기

Software/C/C++

[C++] Memory Packing 메모리 패킹 1.요약 #pragma pack을 이용하여 메모리를 특정 align으로 packing할 수 있다. 2.본문 데브피아에 다음과 같은 팁이 올라왔다. ----------------------------------------------------------------- 구조체 / 공용체 도는 클래스를 바이트 스트림으로 변화시켜야한다면 메모리를 패킹하자. - 사용하는 구조체 또는 공용체 / 클래스를 바이트 스트림으로 변화시켜야한다면, 메모리를 1 바이트 정열을 시켜야 정확한 바이트 단위 크기를 갔습니다. 주로 통신 프로그램을 만드는 경우에 해당하겠군요 예 ) ----------------------------------------------------------------- 그럼 왜 이런 방법을 사.. 더보기
[C++] Data Type 더보기
[C++] new와 delete string *stringArray = new string[100]; ..... delete stringArray; 위의 코드에서 문제는 무엇인가? delete를 수행하고 나면 앞에서 할당한 100개중 99개의 메모리는 해제 되지 않았다. *new를 수행하면 어떤 일이 일어나는가? 1.메모리가 할당된다.(이는 함수 operator new에 의해서임) 2.한 개 이상의 생성자가 그 메모리를 위해 호출된다. *delete를 호출하면 new와는 다른 두가지가 일어난다. 1.메모리를 위한 한 개 이상의 소멸자가 호출된다. 2.그런 다음 메모리가 해제된다. string *stringPtr1 = new string; string *stringPtr2 = new string[100]; .... delete strin.. 더보기
[C++] malloc과 free보다는 new와 delete를 사용한다. *malloc과 free/ 그 변종들의 단점 -이들은 생성자(constructor)와 소멸자(destructor)의 존재를 모른다. 예)10개의 string 객체의 공간을 얻기 위한 방범 String *stringArray1 = static_cast(malloc(10*sizeof(String))); String *stringArray2 = new String[10]; case1은 10개의 string 메모리 공간을 정확하게 확보를 했다. 그러나 바로 사용 할 수 없다. 초기화가 되지 않았다. 또, 초기화를 위해 각각의 점핑을 통해 일일이 초기화를 해주어야 한다. 위의 코드를 Build6.0에서 수행해보면 아래와 같다. 0 1 2 3 4 5 6 7 8 9 stringArray1 =[0x05][0x05][0.. 더보기
[C++] #define 전처리보다 const 나 inline을 #define ASPECT_RATIO 1.653 *위의 소스에서 문제. -#define은 언어 그 자체의 일부가 아니다. -컴파일러는 ASPECT_RATIO를 전혀 알 수 없다. -ASPECT_RATIO이름은 symbol table에 들어가지 않는다. 이런 이유로 상수 이용시 에러가 발생하면 혼란이 야기된다. -에러메시지는 1.653으로 나타나지 ASPECT_RATIO로 나타나지 않는다. *해결책 +상수를 사용하라. const double ASPECT_RATIO = 1.653; +상수 포인터 정의는 주의 해서 사용해야 한다. "Scott Meyers"을 선언하기 위해서 다음과 같이 해야 한다. header 파일 내에서 const char* 기반의 스트링을 정의하기 위해선 const를 두 번 이용해야 한다.. 더보기
[C++] [64비트 윈도우 프로그래밍] ② 64비트 윈도우 파악하기 많은 사람들이 알고 있는 손자병법(孫子兵法) 모공편(謨攻篇)에는 ‘지피지기 백전불태(知彼知己 百戰不殆)’라는 유명한 구절이 있다. 다방면에 뛰어난 지식을 가진 사람들이 개발자인 만큼 모두 잘 알고 있겠지만 ‘적을 알고 나를 알면 백번을 싸워도 위험하지 않다’라는 뜻이다. 이번 시간에서는 64비트 윈도우라는 적(?)을 만나도 자신 있게 대처할 수 있도록 윈도우 응용 프로그램 개발자 입장에서 알아야 할 64비트 윈도우의 달라진 점을 살펴보겠다. 부디 새로운 무공을 부지런히 연마해서 64비트 ‘적벽대전(赤壁大戰)’에서 반드시 승리하시길. 연재 가이드 운영체제 : 윈도우 XP 64비트 에디션, 윈도우 2003 64비트 에디션 개발도구 : 에디터, 32/64비트 C/C++ 컴파일러 기초지식 : C/C++ 프로그래.. 더보기
[C++] [64비트 윈도우 프로그래밍] ① 32비트 프로그램을 엄호하라 88년은 필자가 한창 8비트 컴퓨터였던 MSX2에 빠져있던 시기였다. 그 당시 교육용 컴퓨터로 16비트 컴퓨터가 채택되어 8비트 컴퓨터의 열렬한 지지자였던 필자의 가슴에 상처(?)가 되었던 기억이 난다. 10여년이 지난 지금 컴퓨터는 발전에 발전을 거듭해 64비트 CPU와 64비트 운영체제가 등장했다. 본 연재에서는 3회에 걸쳐 이제 곧 대중화될 64비트 윈도우에서 프로그래밍을 하기 위한 가이드를 제공한다. 부디 필자의 8비트 시절과 같은 실수를 범하지 말고 좀 더 넓어진 64비트 메트릭스에서 네오를 찾을 수 있기를 바란다. 연재 가이드 운영체제 : 윈도우 XP 64비트 에디션, 윈도우 2003 64비트 에디션 개발도구 : 에디터, 32/64비트 C/C++ 컴파일러 기초지식 : C/C++ 프로그래밍, 윈.. 더보기
[CBuilder] DynamicArray [Length of dynamic arrays] +Length필드로 배열의 크기와, 메모리를 할당받는다. DynamicArray arrayOfInt; arrayOfInt.Length = 10; cout 더보기
[API] FILE IO Function File IO Functions Function Ansi C/C++ Borland C++ MS VisualC++ File Open FILE *fopen(consit char *filename, const char *mode) ----------------------------------- return : FILE pointer성공하면. 실패하면 NULL mode : r :읽기 전용으로 파일을 연다. 파일 포인터는 선두에 있다. w :쓰기 위해서 파일을 연다. 파일이 존재하고 있지 않은 경우에는 새로 생성한다. 파일 포인터는 파일의 제일 뒤에 위치한다. a :추가를 위해서 파일을 연다. 파일이 존재하고 있지 않은 경우에는 새로 생성한다. 파일 포인터는 파일의 제일 뒤에 위치한다. r+:기존의 파일을 쓰고 .. 더보기
[API] Access Violation을 방지하기 위한 함수 Ex) typedef struct _info { int n; char name[1024]; };INFO,*PINFO; INFO* t; strcpy(t->name, "Can it dead?"); if i execute above code then windows should occur exception violation. do below, should more safe. if(!IsBadReadPtr(t,sizeof(t)) { strcpy(t->name, "can it dead?"); } Chek available point function +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ API Name + Description +++++++++++.. 더보기