일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 신혼여행
- 프로그래밍
- 문학
- 안드로이드
- 회계
- poetry
- C/C++
- Android
- 영화
- 책
- english presentation
- english essay
- 필리핀
- STL
- radar
- 사진
- network
- 영어
- Programming
- Joe Satriani
- English
- 돈
- java
- HONEYMOON
- 함수포인터
- generic algorithm
- 사랑
- 포인터
- 시
- 보라카이
- Today
- 16
- Total
- 794,026
목록프로그래밍 (10)
Humaneer.net
디버깅이 어려운 이유는 간단하다. 사람들은 자기가 보고자 하는 것만 보기때문이다. 아는 것만 보려하기 때문이다. 코드의 에러를 예측할 때는 자기가 아는 만큼 안에서 예측을 하게 된다. 고로 경험과 지식, 그리고 이 것들을 지혜로 흡수한 사람은 당연히 디버깅을 잘한다. 결론 : 무식이 죄다. ㅋ /* blah blah blah ... ... ... */ BYTE* buf = new BYTE(14); /* blah blah ... ... ... */ delete [] buf; 어제 런타임 에러가 난 버그가 포함된 코드이다. 분명히 delete [] buf; 이 구문에서 런타임 오류가 나는 걸 바로 잡아냈다. 처음엔 후~ 뻔하지 동적으로 할당한 메모리를 초과해서 내가 무슨 짓을 하였구나~. 그런데 난 절대로 ..
회사에 아는 선임분이 ARM 교육을 가셔서 부트 로더쪽 코딩으로 뭔가를 실습하는데, 잘 모르겠다고 메신저로 물어보시길 "C에서 특정 주소로 점프 하려면 우찌해야 하냐?" 참고로 부트로더의 역할을 내가 아는데로 간단하게 정리를 해보면 1. 뭔가를 한다 -_- (보통 시리얼 통신(rs-232,)을 통해 커널이미지를 정해진 주소에 다운로드 시키게 된다) 2. 특정 주소(커널 이미지의 시작점)로 점프를 한다. 3. 끝 -_- 역시 .. 내가 아는데로 정리하니 ... 간단하다 -_- . 다시 말해 모르는게 속편하다는 거 ㅋ 아무튼 질문을 받고 내가 처음에 바로 떠올린건 인라인 어셈블리였지만, '어셈은 안돼~' 라는 말에 함수포인터를 써보기로 하였다. 커널(커널함수)의 리턴이나 인자는 없다고 가정하였다. 쉽게 말해..
GREAT CODE(하드웨어의 이해) 카테고리 컴퓨터/IT 지은이 랜달 하이드 (에이콘출판, 2007년) 상세보기 최근에 질러서 보고 있는 책이다. 필자가 말하고자 하는 바는 다음과 같다. HLL(High Level Language)의 컴파일러가 아무리 똑똑하더라도 H/W(혹은 컴퓨터 아키텍처)에 대한 이해도가 부족한 사람이 작성한 코드는 어찌할 수가 없다. 고로 H/W에 대해 이해를 해야 멋진 코드가 나온다. 나같이 무지한 S/W쟁이가 필수적으로 봐야할 책이 아닌가 싶다. 현재는 6장 메모리 구조와 접근이라는 챕터를 읽고 있다. 폰 노이만 아키텍처의 기본적인 컨셉과, 시스템 버스, 클럭, 메모리 구조, 접근에 관한 문제를 얕지 않으면서도 알기 쉽게 설명하고 있다. 후다닥 독파해버려야지. +_+;
눈컴파일 및 실시간 두뇌 실행을 해봅시다. 거두절미 하고 아래의 소스는 과연 실행이 잘 될까? #include using namespace std; int main() { char str2[] = "abc"; str2[0] = 'A'; cout
왜 C++ 와 C 가 함께 쓰기가 어려울까요 ? C++야 C에서 나왔으니까 당연히 두 언어는 함께 섞어 써도 아무런 문제가 없어야 되는거 아냐 ? 라고 생각하실지도 모르겠습니다. 그렇지만 C++와 C 를 섞어 쓰는 게 생각만큼 그리 쉽진 않습니다. 개선된 C로서 C++ 특징 중 하나가 함수 재정의(function override) 가 가능하다는 것이고, 이것을 처리하기 위해서는 함수 심볼명을 코드에 나온 그대로 생성하는 게 아니라 컴파일러가 조정할 필요가 있게 됩니다. 이렇게 컴파일러가 함수 심볼명을 재정의하는 것을 name mangling 이라고 하는데요, 이것 때문에 C와 C++를 섞어 쓰는게 쉽지 않습니다. 어떻게 name mangling 이루어 지는지 아래 코드를 통해 눈으로 확인해 보겠습니다. ..
시작하기 전에이 글은 내가 가끔은 제대로 생각하기도, 때로는 잘못생각하기도 했던 endian에 대해 확실하게 개념을 잡기위함이다. -_- 나중에 또 헷갈리면 찾아보기 위해 ㅋ Big/Little EndianCPU가 multi byte의 데이터를 메모리에 저장할 때 리틀 엔디안(Little Endian)과 빅 엔디안(Big Endian)의 방식이 있다. 2학년 때 어깨너머로 누구에게 잠깐 듣고나서 '으음 그렇군' 하고 넘어갔다가, 3학년 때 컴퓨터 구조수업 때 배우면서 '아하 그랬었군~!' 했던게 기억이 난다. 0x01234567 이라는 4바이트의 데이터를 메모리시작 주소 0x00에 저장한다고 하였을 때, Big/Little Endian은 아래와 같이 저장할 것이다. 간단하다 simple! Memory A..
통신관련 프로그래밍을 하다보면, 여러 장치간의 프로토콜을 정해야할 때가 있다. 패킷의 헤더를 정해야 할 것이고, 그 밖에 여러가지 것들, 그리고 데이터까지. 그런데 데이터의 길이가 가변적이라면? typedef unsigned int u32; typedef unsigned char u8; #pragma pack(1) typedef struct _packet_example { u32 op; u8 source; u8 dest; u8* data; } PACKET_EXAMPLE; #pragma pack() 다음과 같이 정의를 할 수 있을 것이다. 자 이렇게 하였을 때 이 패킷의 사이즈는 얼마가 될까? 4 + 1 + 1 + 4 = 10바이트가 될 것이다. 하지만 아래와 같은 기법도 있다. #pragma pack(1..
#include int test1(int* arg) { if(arg) return *arg; else return 0; } typedef int(*ptr)(int* arg); int main() { ptr p = test1; int a = 5; printf("%d\n",p(&a)); return 0; } 종종 헷갈리는 포인터질 -_-; typedef가 들어가니 더 헷갈린다 훗~
그냥 심심해서 구현해본 Heap Sort다. 사실 이게 진짜 Heap Sort인지는 나도 모른다-_-. 그냥 힙에 원소를 모조리 집어넣었다가 다시 모조리 빼면 정렬된 값이 나오니까 그게 정렬아닌가? ㅋㅋ 사용한 자료구조는 배열을 이용한 이진 트리이며, 나중에 이것저것 정렬해보기 위해 템플릿으로 구현하였다. 이 알고리즘의 Time Complexity를 나름 분석해보겠다. 정렬을 할 때 걸리는 시간은 직관적으로 엔트리들을 힙에 삽입하는 시간 T(enQueue)과 힙에서 엔트리를 빼내는 시간 T(deQueue)의 합을 통해 알 수있다. 1. Enqueue Heap에 엔트리를 추가할 때 사용되는 함수는 enQueue()안에서 호출된 upWard()이다. 부모와 자식을 비교해서 자식이 크면 값을 교환하고 부모의 ..
[1편 원문보기: http://www.gpgstudy.com/forum/viewtopic.php?t=566] [2편 원문보기: http://www.gpgstudy.com/forum/viewtopic.php?t=627] [3편 원문보기: http://www.gpgstudy.com/forum/viewtopic.php?t=860] 프로그래밍과 영어 by 류광 한국의 프로그래머들이 흔히 듣는 조언 가운데, ‘영어는 필수입니다’라는 것이 있다. 영어가 필수인 이유로 흔히 말하는 것은 외국 책이나 자료를 빨리 제대로 읽을 수 있어야 한다는 것이다. 그러나 프로그래머가 영어를 잘해야 하는 또 다른, 그리고 좀 더 중요한 이유는, 코딩 자체가 일종의 영작문이라고 할 수 있다는 점이다. 거의 대부분의 프로그래밍 언어들은..