'비공개' 카테고리의 다른 글
파일 입출력 속도에 관한 고찰(자료 수집 및 테스트 중) (1) | 2012.08.30 |
---|---|
함수 호출시 인자 전달에 대한 주의점 (0) | 2012.08.20 |
[Game][Console] 배달맨 (0) | 2012.08.17 |
[C++11] auto Keyword (0) | 2012.04.16 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
파일 입출력 속도에 관한 고찰(자료 수집 및 테스트 중) (1) | 2012.08.30 |
---|---|
함수 호출시 인자 전달에 대한 주의점 (0) | 2012.08.20 |
[Game][Console] 배달맨 (0) | 2012.08.17 |
[C++11] auto Keyword (0) | 2012.04.16 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
첫번째 파일은 test_open.c로
open, close만 10,000,000번 한다.
두번째 파일은 test_fopen.c는
fopen, fclose만 10,000,000번 한다.
테스트는 test_open한번 실행하고 test_fopen실행하는 식으로 총 5번 시간을 측정했다.
test_open : avg 24.6/sec
test_fopen : avg 37.6/sec
open, close 함수가 fopen(fclose)함수에 비해 1.5배 정도 빠른것으로 보인다.
출처 http://blog.daum.net/jchern/12875160
Text 보다 binary로 파일 데이터를 읽는게 훨씬 빠름
파일 입출력 함수에 대한 속도차의 거의 느낄수 없다.
내가 테스트한 결과... 멍미 자꾸 fopen이 젤 빠르게 나온다 ㅠ
그동안 내가 신뢰해온 CreateFile이 무너지는 순간인가 ㅜ.ㅡ
한번에 읽는 바이트 수에 따라 달라질라나
_sopen_s() 함수 추가 : fopen_s와 비슷한 속도차이를 냈다.
하지만, 때론 비용이 제로의 가깝게 거의 들지 않는다.
스트림을 생성유무의 차이가 있다는데... 좀 더 알아봐야징
모니터에 대한 이야기 (0) | 2012.09.25 |
---|---|
함수 호출시 인자 전달에 대한 주의점 (0) | 2012.08.20 |
[Game][Console] 배달맨 (0) | 2012.08.17 |
[C++11] auto Keyword (0) | 2012.04.16 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
|
모니터에 대한 이야기 (0) | 2012.09.25 |
---|---|
파일 입출력 속도에 관한 고찰(자료 수집 및 테스트 중) (1) | 2012.08.30 |
[Game][Console] 배달맨 (0) | 2012.08.17 |
[C++11] auto Keyword (0) | 2012.04.16 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
생각나는데로 막짬 2시간 30분 ㅠ
역시 난 C 스타일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
#include <iostream>
using namespace std;
// 벽으로 이동하려고 하면 어떻게 되는가?
// 첫 번째 목표 지점에 둔 상자를 다시움직이려고 하면 어떻게 되는가?
// 상자를 두개 이상 밀면 어떻게 되는가?
// 상자를 벽 쪽으로 밀면 어떻게 되는가?
const int MAX_SPACE = 30;
const char g_Stage1[][MAX_SPACE] = {
{"########"},
{"# .. p #"},
{"# OO #"},
{"# #"},
{"########"}
};
enum eObject {
OBJ_NONE = 0,
OBJ_SPACE,
OBJ_WALL,
OBJ_GOAL,
OBJ_BLOCK,
OBJ_BLOCK_ON_GOAL,
OBJ_MAN,
OBJ_MAN_ON_GOAL
};
enum eDirection
{
DIR_LEFT = 0,
DIR_RIGHT,
DIR_UP,
DIR_DOWN
};
void MoveObject( int* _pBoard, int _pos, eDirection _eDir );
int main()
{
/// 초기화
int line = sizeof( g_Stage1 ) / MAX_SPACE ;
int* pStage = new int[line * MAX_SPACE];
memset(pStage, 0, line * MAX_SPACE );
// 컨트롤 하기위한 배열 재구성
for( int i = 0; i < line; i++ )
{
for( int j = 0; j < MAX_SPACE; j++ )
{
switch( g_Stage1[i][j] )
{
case ' ' : pStage[i * MAX_SPACE + j] = OBJ_SPACE; break;
case '#' : pStage[i * MAX_SPACE + j] = OBJ_WALL; break;
case '.' : pStage[i * MAX_SPACE + j] = OBJ_GOAL; break;
case 'O' : pStage[i * MAX_SPACE + j] = OBJ_BLOCK; break;
case 'p' : pStage[i * MAX_SPACE + j] = OBJ_MAN; break;
default : pStage[i * MAX_SPACE + j] = OBJ_NONE; break;
}
}
}
while(1)
{
system("cls");
// 배열 그리기
for( int i = 0; i < line; i++ )
{
for( int j = 0; j < MAX_SPACE; j++ )
{
eObject objNum = (eObject)pStage[i * MAX_SPACE + j];
if( objNum == 0 )
{
cout << endl;
break;
}
char ch;
switch( objNum )
{
case OBJ_NONE : break;
case OBJ_SPACE : ch = ' '; break;
case OBJ_WALL : ch = '#'; break;
case OBJ_GOAL : ch = '.'; break;
case OBJ_BLOCK : ch = 'o'; break;
case OBJ_BLOCK_ON_GOAL : ch = 'O'; break;
case OBJ_MAN : ch = 'p'; break;
case OBJ_MAN_ON_GOAL : ch = 'P'; break;
}
cout << ch;
}
}
int nGoalTotalCount = 0;
for( int i = 0; i < line; i++ )
{
for( int j = 0; j < MAX_SPACE; j++ )
{
// 골인 총 개수 파악( 클리어 체크용 )
if( (eObject)pStage[i * MAX_SPACE + j] == OBJ_GOAL )
nGoalTotalCount++;
}
}
// 게임 클리어 판단
int nBlockOnGoalCount = 0;
for( int i = 0; i < line; i++ )
{
for( int j = 0; j < MAX_SPACE; j++ )
{
if( (eObject)pStage[ i * MAX_SPACE + j ] == OBJ_BLOCK_ON_GOAL )
{
if( nBlockOnGoalCount == nGoalTotalCount )
{
cout << endl << "Congraturation!!!" << endl;
system("pause");
return 1;
}
}
}
}
// 설명
cout << endl << "[a:left] / [d:right] / [w:up] / [s:down]" << endl;
// 키 입력
char ch;
cin >> ch;
// 입력받은 키 값에 대한 데이터 처리 및 갱신
int manPos = -1;
for( int i = 0; i < line; i++ )
{
for( int j = 0; j < MAX_SPACE; j++ )
{
// 플레이어 위치
if( (eObject)pStage[i * MAX_SPACE + j] == OBJ_MAN || (eObject)pStage[i * MAX_SPACE + j] == OBJ_MAN_ON_GOAL )
manPos = i * MAX_SPACE + j;
}
}
switch( ch )
{
case 'a' : MoveObject( pStage, manPos, DIR_LEFT );
break;
case 'd' : MoveObject( pStage, manPos, DIR_RIGHT );
break;
case 'w' : MoveObject( pStage, manPos, DIR_UP );
break;
case 's' : MoveObject( pStage, manPos, DIR_DOWN );
break;
}
}
return 0;
}
void MoveObject( int* _pStage, int _pos, eDirection _eDir )
{
int manMovePos = -1;
if( _eDir == DIR_LEFT ) manMovePos = _pos - 1;
else if( _eDir == DIR_RIGHT ) manMovePos = _pos + 1;
else if( _eDir == DIR_UP ) manMovePos = _pos - MAX_SPACE;
else if( _eDir == DIR_DOWN ) manMovePos = _pos + MAX_SPACE;
if( manMovePos < 0 ) return;
// 이동가능한가?
bool bMove = true;
if( (eObject)_pStage[manMovePos] == OBJ_NONE ||
(eObject)_pStage[manMovePos] == OBJ_BLOCK ||
(eObject)_pStage[manMovePos] == OBJ_MAN ||
(eObject)_pStage[manMovePos] == OBJ_WALL ||
(eObject)_pStage[manMovePos] == OBJ_BLOCK_ON_GOAL )
{
bMove = false;
}
// 이동 하려는 지점이 블럭 일 경우 밀자!
int objIndex = -1;
if( (eObject)_pStage[manMovePos] == OBJ_BLOCK )
{
// 밀려는 방향으로 블럭 앞 체크
if( _eDir == DIR_LEFT ) objIndex = manMovePos - 1;
else if( _eDir == DIR_RIGHT ) objIndex = manMovePos + 1;
else if( _eDir == DIR_UP ) objIndex = manMovePos - MAX_SPACE;
else if( _eDir == DIR_DOWN ) objIndex = manMovePos + MAX_SPACE;
if( objIndex == -1 || objIndex < 0 ) return;
if( (eObject)_pStage[objIndex] == OBJ_SPACE || (eObject)_pStage[objIndex] == OBJ_GOAL )
bMove = true;
}
if( bMove )
{
// 기존 지점 상태 변경
if( (eObject)_pStage[_pos] == OBJ_MAN_ON_GOAL ) _pStage[_pos] = OBJ_GOAL;
else _pStage[_pos] = OBJ_SPACE;
// 이동 지점 상태 변경
if( (eObject)_pStage[manMovePos] == OBJ_GOAL ) _pStage[manMovePos] = OBJ_MAN_ON_GOAL;
else if( (eObject)_pStage[manMovePos] == OBJ_BLOCK )
{
_pStage[manMovePos] = OBJ_MAN;
if( (eObject)_pStage[objIndex] == OBJ_GOAL ) _pStage[objIndex] = OBJ_BLOCK_ON_GOAL;
else _pStage[objIndex] = OBJ_BLOCK;
}
else _pStage[manMovePos] = OBJ_MAN;
}
}
|
파일 입출력 속도에 관한 고찰(자료 수집 및 테스트 중) (1) | 2012.08.30 |
---|---|
함수 호출시 인자 전달에 대한 주의점 (0) | 2012.08.20 |
[C++11] auto Keyword (0) | 2012.04.16 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
[기사 스크랩][은퇴 후 40년 살아가는 법] 퇴직 후 바로 국민연금 안 나와… 소득 없는 '마의 10년(현재 40세인 경우 55~65세)'을 버텨라 (0) | 2012.01.04 |
|
- 인스턴스 시점에 초기화 필요. 메모리 공간 확보에 필요.
- 배열 인스턴스에 사용 불가.
- 한번 결정된 데이터 타입은 변경되지 않는다.
- delete 키워드 사용시 RunTime Error 를 발생시킨다.
함수 호출시 인자 전달에 대한 주의점 (0) | 2012.08.20 |
---|---|
[Game][Console] 배달맨 (0) | 2012.08.17 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
[기사 스크랩][은퇴 후 40년 살아가는 법] 퇴직 후 바로 국민연금 안 나와… 소득 없는 '마의 10년(현재 40세인 경우 55~65세)'을 버텨라 (0) | 2012.01.04 |
Visual Studio gallery (0) | 2011.12.08 |
void prtLog(char *strFile, char *strLog, ...)
{
char PNT[1024] = {0,}; |
[Game][Console] 배달맨 (0) | 2012.08.17 |
---|---|
[C++11] auto Keyword (0) | 2012.04.16 |
[기사 스크랩][은퇴 후 40년 살아가는 법] 퇴직 후 바로 국민연금 안 나와… 소득 없는 '마의 10년(현재 40세인 경우 55~65세)'을 버텨라 (0) | 2012.01.04 |
Visual Studio gallery (0) | 2011.12.08 |
넥슨 개인정보 유출과 대응책 (0) | 2011.11.30 |
[C++11] auto Keyword (0) | 2012.04.16 |
---|---|
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
Visual Studio gallery (0) | 2011.12.08 |
넥슨 개인정보 유출과 대응책 (0) | 2011.11.30 |
log 파일 실시간 검사 Utility (0) | 2011.11.30 |
로그 데이터 남기기 ( 가변인자 활용 ) (0) | 2012.03.20 |
---|---|
[기사 스크랩][은퇴 후 40년 살아가는 법] 퇴직 후 바로 국민연금 안 나와… 소득 없는 '마의 10년(현재 40세인 경우 55~65세)'을 버텨라 (0) | 2012.01.04 |
넥슨 개인정보 유출과 대응책 (0) | 2011.11.30 |
log 파일 실시간 검사 Utility (0) | 2011.11.30 |
Tool 배포시 유의점 (0) | 2011.10.13 |
넥슨의 ‘메이플스토리’를 플레이하는 이용자 정보가
해킹 당해 1320만명의 개인정보가 유출되었습니다.
이 사건을 통해 사용자의 이름과 계정, 암호화 된 비밀번호와 주민등록번호 등이 유출되었습니다. 이번
해킹사건은 내부자 PC에 악성코드를 침투시켜 회원 정보를 유출한 방법으로, 농협과 SK커뮤니케이션의
해킹 방식과 유사한 방식으로 이루어졌다고 합니다. 추가적인 2차 피해가 발생할 수 있으므로 아래의
대응책을 확인 하시여 주의하여 주시기 바랍니다.
- 대응책 -
1. 자신의 개인정보 유출여부를 확인해보시기 바랍니다. (넥슨 제공)
->http://maplestory.nexon.com/MapleStory/Page/Gnx.aspx?URL=Common/PrivateInfoNotice
2. KISA에서 제공하는'주민등록번호 이용내역 확인' 코너를 통해 계정 이용여부를 확인하고 자주 쓰지
않는 계정은 탈퇴하는 것이 좋습니다.
->http://clean.kisa.or.kr/mainList.do
3.
같은 아이디를 사용하는 계정들의 비밀번호를 변경해야 합니다.
4. 주민등록번호 대신 아이핀(i-PIN) 인증으로 변경합니다.
->http://i-pin.kisa.or.kr/kor/main.jsp
5.
개인정보유출과 관련된 피해는 개인정보 침해 신고 e콜센터
118에 전화해 문의해야 합니다.
아이핀 사용해볼까나 ㄷㄷ
[기사 스크랩][은퇴 후 40년 살아가는 법] 퇴직 후 바로 국민연금 안 나와… 소득 없는 '마의 10년(현재 40세인 경우 55~65세)'을 버텨라 (0) | 2012.01.04 |
---|---|
Visual Studio gallery (0) | 2011.12.08 |
log 파일 실시간 검사 Utility (0) | 2011.11.30 |
Tool 배포시 유의점 (0) | 2011.10.13 |
타입캐스팅 만들기( 변환 함수 ) (0) | 2011.09.22 |
DebugView가 VS의 출력창을 커버(?)해준다면,
Unix의 Tail 기능( 파일의 끝 부분 읽기를 수행 )을 Windows에서 보기 쉽게 해주는 유틸리티 프로그램!
참고로, 현재 cmd 창 내에서 [-Tail -f log2.txt] 이런식으로 사용 가능합니다.
허나, 이 유틸리티의 장점은!
저희 Log2.txt 와 같은 실시간 갱신되는 log 파일들을 모니터링 해줍니다.
또한, 하일라이트 기능 및 분할창 등등의 다양한 기능을 제공하여 잘만 활용한다면
저희 디버깅용 다이얼로그보다도 더 유용하게 사용 가능하리라 봅니다.
다빼놓고 일단 화면이 넓고 조절가능해 맘에듬.
제가 대충 찾아봤는데 다음과 같은 툴이 있네요.
- Win Tail
이건 무료버전과 상용버전이 따로 있는듯 ㅜ.ㅡ
무료버전은 딱 메모장과 동일하고
상용버전은 화려한 기능이 +.+
- Bara Tail
상용버전 밖에 못 찼음.
Visual Studio gallery (0) | 2011.12.08 |
---|---|
넥슨 개인정보 유출과 대응책 (0) | 2011.11.30 |
Tool 배포시 유의점 (0) | 2011.10.13 |
타입캐스팅 만들기( 변환 함수 ) (0) | 2011.09.22 |
Direct3D Device Lost (0) | 2011.09.09 |