로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

GREAT CODE 제2권 로우레벨을 고려한 프로그램 최적화

   
지은이 랜달 하이드   |   출판사 에이콘  |   발행일 2007년 07월 26일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 30,000원27,000원 10%
마일리지 5% 1,500원
발행일 2007-07-26
ISBN 8960770175 | 9788960770171
기타정보 번역서 | 632쪽
예상출고일
배송비 무료배송
   
프로그래밍언어
종합지수 5p 385 위
   
이 책의 원서
  Write Great Code, Volume 2 (2/E)
NO STARCH PRESS | Randall Hyde
 

유능한 프로그래머가 되기 위해 닦아야 할 개념 원리를 학습해서 프로그래머의 내공을 높여주는 원리학습 가이드 시리즈인 GREAT CODE 제2권. 이 시리즈는 더 빠르고 훌륭한 최고의 코드를 짤 수 있도록 전 4권에 걸쳐 프로그래밍의 근본원리를 쉽게 가르쳐준다.

제2권《로우레벨을 고려한 프로그램 최적화》에서는 고급언어로 작성된 소스 코드가 컴파일러를 거쳐 어떤 식의 기계어 코드로 바뀌는지에 대해 다룬다. 로우레벨을 고려한 프로그램 최적화와 고급언어 프로그래머를 위한 어셈블리, 컴파일러 동작과 코드 생성, 반복제어구조, 함수와 프로시저 등의 내용으로 구성했다.
감사의 글
저자 소개
옮긴이의 말
옮긴이 소개
들어가며

1장 로우레벨을 고려한 프로그램 최적화

1.1 컴파일러 품질에 대한 오해
1.2 어셈블리 언어를 배워야 하는 이유
1.3 어셈블리 프로그래머가 될 필요는 없다
1.4 로우레벨에 대한 고려
1.4.1 받은 만큼만 돌려주는 컴파일러
1.4.2 컴파일러가 좋아하는 코드의 특성
1.4.3 어셈블리를 고려한 고급언어 코딩 방법
1.5 고급언어 코딩
1.6 이 책을 읽기 위해 필요한 사전 지식
1.7 언어 중립적인 접근 방법
1.8 최고의 코드가 가지는 특징
1.9 동작 환경
1.10 참고 자료


2장 어셈블리 언어를 꼭 배워야 할까?

2.1 어셈블리 언어는 배우기 어렵다
2.2 해결책: GREAT CODE 제2권
2.3 해결책: 고급 어셈블러
2.4 고급 어셈블러 HLA
2.5 하이레벨로 생각하고 로우레벨로 코딩하기
2.6 로우레벨 프로그래밍 패러다임
2.7 유용한 참고 문헌


3장 고급언어 프로그래머를 위한 80x86 어셈블리

3.1 배워두면 도움되는 어셈블리 언어
3.2 80x86 어셈블리 문법

3.3 기본 80x86 아키텍처
3.3.1 레지스터
3.3.2 80x86 범용 레지스터
3.3.3 80x86 EFLAGS 레지스터

3.4 리터럴 상수
3.4.1 이진 리터럴 상수
3.4.2 십진 리터럴 상수
3.4.3 16진 리터럴 상수
3.4.4 문자와 문자열 리터럴 상수
3.4.5 실수 리터럴 상수

3.5 선언(기호) 상수
3.5.1 HLA에서의 선언 상수
3.5.2 Gas에서의 선언 상수
3.5.3 MASM과 TASM에서의 선언 상수

3.6 80x86 주소 지정 방식
3.6.1 80x86 레지스터 주소 지정 방식
3.6.2 즉시 주소 지정 방식
3.6.3 직접 메모리 주소 지정 방식
3.6.4 레지스터 간접 주소 지정 방식
3.6.5 인덱스 주소 지정 방식
3.6.6 스케일 인덱스 주소 지정 방식

3.7 데이터 선언
3.7.1 HLA에서의 데이터 선언
3.7.2 MASM과 TASM에서의 데이터 선언
3.7.3 Gas에서의 데이터 선언

3.8 오퍼랜드 크기 지정
3.8.1 HLA에서의 타입 지정
3.8.2 MASM과 TASM에서의 타입 지정
3.8.3 Gas에서의 타입 지정

3.9 80x86 기본 명령어 셋
3.10 참고 자료


4장 고급언어 프로그래머를 위한 파워PC 어셈블리

4.1 배워두면 도움되는 어셈블리 언어
4.2 어셈블리 문법

4.3 기본 파워PC 아키텍처
4.3.1 범용 정수 레지스터
4.3.2 범용 실수 레지스터
4.3.3 유저 모드용 특수 목적 레지스터

4.4 리터럴 상수
4.4.1 이진 리터럴 상수
4.4.2 십진 리터럴 상수
4.4.3 16진 리터럴 상수
4.4.4 문자와 문자열 리터럴 상수
4.4.5 실수 리터럴 상수

4.5 선언(기호) 상수

4.6 파워PC 주소 지정 방식
4.6.1 파워PC 레지스터 접근
4.6.2 즉시 주소 지정 방식
4.6.3 파워PC 메모리 주소 지정 방식

4.7 데이터 정의
4.8 오퍼랜드 크기 지정
4.9 기본 명령어 셋
4.10 참고 자료


5장 컴파일러 동작과 코드 생성

5.1 프로그래밍 언어가 사용하는 파일 유형

5.2 프로그래밍 언어 소스 파일
5.2.1 토큰화 형식 소스 파일
5.2.2 특화된 소스 파일 포맷

5.3 컴퓨터 언어 처리기의 유형
5.3.1 순수 인터프리터
5.3.2 인터프리터
5.3.3 컴파일러
5.3.4 증분 컴파일러

5.4 번역 과정
5.4.1 어휘 분석과 토큰
5.4.2 파싱(구문 분석)
5.4.3 중간 코드 생성
5.4.4 최적화
5.4.5 컴파일러 옵션 비교
5.4.6 네이티브 코드 생성

5.5 컴파일러의 출력물
5.5.1 고급언어 코드로 된 컴파일러 출력
5.5.2 어셈블리 언어로 된 컴파일러 출력
5.5.3 오브젝트 파일로 된 컴파일러 출력
5.5.4 실행 파일로 된 컴파일러 출력

5.6 오브젝트 파일 포맷
5.6.1 COFF 파일 헤더
5.6.2 COFF 옵션 헤더
5.6.3 COFF 섹션 헤더
5.6.4 COFF 섹션
5.6.5 재배치 섹션
5.6.6 디버깅과 심벌 정보
5.6.7 오브젝트 파일 포맷에 대해 더 공부하려면

5.7 실행 파일 포맷
5.7.1 페이지, 세그먼트, 파일 크기
5.7.2 내부 단편화
5.7.3 공간 최적화를 하는 이유

5.8 오브젝트 파일 안의 데이터와 코드 정렬
5.8.1 섹션 정렬 크기 선택
5.8.2 섹션 연결
5.8.3 섹션 정렬 값 제어
5.8.4 섹션 정렬 값과 라이브러리 모듈

5.9 링커와 링커가 코드에 주는 영향
5.10 참고 자료


6장 컴파일러 출력물 분석 툴

6.1 배경 지식

6.2 컴파일러에서 어셈블리 코드를 출력하게 하는 법
6.2.1 GNU와 볼랜드 컴파일러의 어셈블리 코드 출력물
6.2.2 비주얼 C++의 어셈블리 코드 출력물
6.2.3 어셈블리 코드 출력물 예제
6.2.4 컴파일러의 어셈블리 코드 출력물 분석

6.3 컴파일러 출력물 분석을 위한 오브젝트 코드 유틸리티
6.3.1 마이크로소프트의 dumpbin.exe 유틸리티
6.3.2 FSF/GNU의 objdump.exe 도구

6.4 컴파일러 출력물 분석을 위한 역어셈블러 사용법

6.5 컴파일러 출력물 분석을 위한 디버거 사용법
6.5.1 통합 환경에 내장된 디버거를 사용하는 법
6.5.2 독립 디버거를 사용하는 법

6.6 컴파일러 출력물 비교
6.6.1 diff를 이용한 코드의 수정 전/후 비교
6.6.2 수작업을 통한 비교

6.7 참고 자료


7장 상수와 고급언어

7.1 리터럴 상수와 프로그램 효율성
7.2 리터럴 상수와 선언 상수
7.3 상수식
7.4 선언 상수와 읽기 전용 메모리 객체
7.5 열거형
7.6 불리언 상수
7.7 실수 상수
7.8 문자열 상수
7.9 복합 데이터 타입 상수
7.10 참고 자료


8장 고급언어의 변수

8.1 실행시 메모리 구성
8.1.1 코드, 상수, 읽기 전용 섹션
8.1.2 정적 변수 섹션
8.1.3 BSS 섹션
8.1.4 스택 섹션
8.1.5 힙 섹션과 동적 메모리 할당

8.2 변수란 무엇인가
8.2.1 속성
8.2.2 바인딩
8.2.3 정적 객체
8.2.4 동적 객체
8.2.5 범위
8.2.6 수명
8.2.7 그래서 변수가 뭔데?

8.3 변수 저장 공간
8.3.1 정적 바인딩과 정적 변수
8.3.2 유사 정적 바인딩과 자동 변수
8.3.3 동적 바인딩과 동적 변수

8.4 공통 기본 데이터 타입
8.4.1 정수 변수
8.4.2 부동 소수점/실수 변수
8.4.3 문자 변수
8.4.4 불리언 변수

8.5 변수 주소와 고급언어
8.5.1 전역 변수와 정적 변수의 저장 공간 할당
8.5.2 자동 변수 사용을 통한 옵셋 크기 줄이기
8.5.3 중간 변수를 위한 저장 공간 할당
8.5.4 동적 변수와 포인터를 위한 저장 공간 할당
8.5.5 레코드/구조체 사용을 통한 명령 옵셋 크기 줄이기
8.5.6 레지스터 변수

8.6 메모리에서 변수 정렬하기
8.6.1 레코드와 정렬

8.7 참고 자료


9장 배열 자료형

9.1 배열이란 무엇인가
9.1.1 배열 선언
9.1.2 메모리에서 배열 표현
9.1.3 배열 원소에 접근하기
9.1.4 패딩과 패킹
9.1.5 다차원 배열
9.1.6 동적 배열과 정적 배열

9.2 참고 자료


10장 문자열 자료형

10.1 문자열 형식
10.1.1 0으로 끝나는 문자열
10.1.2 길이로 시작하는 문자열
10.1.3 7비트 문자열
10.1.4 HLA 문자열
10.1.5 서술자 기반 문자열

10.2 정적, 유사 동적, 동적 문자열
10.2.1 정적 문자열
10.2.2 유사 동적 문자열
10.2.3 동적 문자열

10.3 문자열의 참조 카운팅
10.4 델파이/카이릭스 문자열
10.5 고급 언어에서의 문자열 사용
10.6 문자열의 문자 데이터
10.7 참고 자료


11장 포인터 자료형

11.1 포인터의 정의와 오해
11.2 고급언어에서의 포인터 구현
11.3 포인터와 동적 메모리 할당

11.4 포인터 동작과 포인터 연산
11.4.1 포인터에 정수 더하기
11.4.2 포인터에서 정수 빼기
11.4.3 포인터에서 포인터 빼기
11.4.4 포인터 비교
11.4.5 논리 AND/OR와 포인터
11.4.6 포인터의 다른 연산

11.5 단순 메모리 할당자 예제
11.6 가비지 콜렉션
11.7 운영체제와 메모리 할당
11.8 힙 메모리 오버헤드

11.9 일반적인 포인터 문제
11.9.1 포인터를 초기화하지 않은 채로 사용하는 것
11.9.2 잘못된 값이 있는 포인터를 사용하는 것
11.9.3 포인터를 해제한 후에 그 공간을 사용하는 것
11.9.4 프로그램이 공간을 전부 사용한 후에 해제하지 않는 것
11.9.5 잘못된 자료형으로 간접 참조하는 것

11.10 참고 자료


12장 레코드, 유니온, 클래스 자료형

12.1 레코드
12.1.1 여러 언어에서의 레코드 선언
12.1.2 레코드의 인스턴스 생성
12.1.3 컴파일시에 레코드 데이터 초기화
12.1.4 레코드의 메모리 저장소
12.1.5 메모리 효율을 높이기 위한 레코드 사용
12.1.6 동적 레코드 타입과 데이터베이스

12.2 판별자 유니온

12.3 여러 언어에서의 유니온 선언
12.3.1 C/C++의 유니온 선언
12.3.2 파스칼/델파이/카이릭스의 유니온 선언
12.3.3 HLA의 유니온 선언

12.4 유니온의 메모리 저장소
12.5 유니온의 또 다른 사용법
12.6 가변형
12.7 네임스페이스

12.8 클래스와 객체
12.8.1 클래스와 객체의 비교
12.8.2 C++의 간단한 클래스 선언
12.8.3 가상 메소드 테이블
12.8.4 VMT의 공유
12.8.5 클래스의 상속
12.8.6 클래스의 다형성
12.8.7 클래스, 객체, 성능

12.9 참고 자료


13장 산술 연산과 논리 연산

13.1 산술식과 컴퓨터 구조
13.1.1 스택 기반 컴퓨터
13.1.2 누산기 기반 컴퓨터
13.1.3 레지스터 기반 컴퓨터
13.1.4 산술식의 대표적인 형태
13.1.5 3주소 구조
13.1.6 2주소 구조
13.1.7 구조의 차이점과 코드
13.1.8 복잡한 수식 다루기

13.2 산술문 최적화
13.2.1 상수 접기
13.2.2 상수 전달
13.2.3 죽은 코드 제거
13.2.4 공통 부분식 제거
13.2.5 연산 대체
13.2.6 귀납
13.2.7 루프 불변식
13.2.8 최적화 도구와 프로그래머

13.3 산술식에서의 부수효과
13.4 부수효과 떼어내기: 시퀀스 포인트
13.5 부수효과로 인한 문제점 회피
13.6 계산 순서 강제 지정

13.7 단축 연산
13.7.1 단축 연산과 불리언 표현식
13.7.2 단축 연산 혹은 완전 연산 강제하기
13.7.3 효율성 문제

13.8 산술 연산의 상대 비용
13.9 참고 자료


14장 분기 제어 구조

14.1 제어 구조는 계산에 비해 느리다!
14.2 로우레벨 제어 구조에 대한 소개
14.3 goto문
14.4 break, continue, next, return문

14.5 if문
14.5.1 특정 if/else문의 효율성 향상
14.5.2 if문에서 완전 불리언 연산 강제하기
14.5.3 if문에서 단축 불리언 연산 강제하기

14.6 switch/case문
14.6.1 switch/case문의 의미
14.6.2 점프 테이블과 연속 비교
14.6.3 switch/case문의 기타 구현 방법
14.6.4 switch문에 대한 컴파일러의 출력물

14.7 참고 자료


15장 반복 제어 구조

15.1 while 루프
15.1.1 while 루프에서 완전 불리언 연산 강제하기
15.1.2 while 루프에서 단축 불리언 연산 강제하기

15.2 repeat..until(do..until/do..while) 루프
15.2.1 repeat..until 루프에서 완전 불리언 연산 강제하기
15.2.2 repeat..until 루프에서 단축 불리언 연산 강제하기

15.3 forever..endfor 루프
15.3.1 forever 루프에서 완전 불리언 연산 강제하기
15.3.2 forever 루프에서 단축 불리언 연산 강제하기

15.4 유한 루프(for 루프)
15.5 참고 자료


16장 함수와 프로시저

16.1 간단한 함수와 프로시저 호출
16.1.1 반환 주소 저장
16.1.2 오버헤드의 다른 원인

16.2 리프 함수와 리프 프로시저
16.3 매크로와 인라인 함수
16.4 함수나 프로시저로 인자 전달

16.5 활성화 레코드와 스택
16.5.1 활성화 레코드의 구성
16.5.2 지역 변수에 옵셋 할당
16.5.3 옵셋과 인자
16.5.4 지역 변수와 인자에 접근

16.6 인자 전달 방법
16.6.1 값에 의한 전달
16.6.2 참조에 의한 전달

16.7 함수의 반환 값
16.8 참고 자료


부록 A 80x86 계열 CPU와 파워PC 계열 CPU의 간단한 비교

A.1 RISC와 CISC의 아키텍처 차이
A.1.1 명령어당 수행 작업
A.1.2 명령어의 크기
A.1.3 클록 속도와 명령어당 클록 수
A.1.4 메모리 접근과 주소 지정 방식
A.1.5 레지스터
A.1.6 즉시(상수) 오퍼랜드
A.1.7 스택

A.2 컴파일러와 애플리케이션 바이너리 인터페이스 문제
A.3 양쪽 아키텍처에서 훌륭한 코드를 작성하려면
Randall Hyde
최고의 어셈블리 언어 관련 서적인『The Art of Assembly Language』,『GREAT CODE 제1권』(모두 No Starch Press)의 저자다. 또한『Waite Group’s MASM 6.0 Bible』의 공동 저자이기도 하다. 그는 닥터 돕스 저널(Dr.Dobb’s Journal)과 바이트(Byte)지를 비롯한 여러 전문 잡지에 기고하고 있다.

이건호
서울대학교 컴퓨터공학과 학부와 석사를 졸업했다. 각종 경시대회 참가를 취미로 삼다 또 다른 취미인 게임을 직접 만들기로 하고 게임업계에 투신. 엔씨소프트에서 리니지2 서버 프로그래머 등으로 6년 여간 열심히 일하다가 뒤늦게 UC버클리에서 공부를 다시 시작하기 직전에 번역을 마쳤다.

안병규
서울대학교 컴퓨터공학과 졸업. 서울과학고 재학시절 국제정보올림피아드 금메달 및 한국정보올림피아드 금상을 수상하였으며, 대학교 재학시절 게임업계에 투신하여 (주)넥슨에서 크레이지 아케이드, 빅샷을 개발했고 (주)제이투엠에서 레이시티를 개발했다. 현재 서울시 청담동에 거주하며 인생 제2의 도약을 준비하는 중이다.

박철현
한국과학기술원 전산학과 학부를 마치고 서울대학교 컴퓨터공학부에서 석사과정으로 네트워크를 공부하고 있다. 빠른 은퇴와 유유자적한 삶을 꿈꾸며 연구와 프로젝트에 매진하고 있다.

임중근
한국과학기술원 전산학과 학부와 석사를 졸업했다. 다수의 프로그래밍 컨테스트에 참가해 수상한 경력이 있는 슈퍼 프로그래머이다. 주 언어는 파스칼과 C++이다.

심지웅
9살 때 LOGO 언어를 시작으로 프로그래밍의 세계에 발을 들여놓은 후 국제정보올림피아드와 ACM ICPC World Final에 진출했다. 서울대학교 동기들과 함께 게임 개발사 헥스플렉스 엔터테인먼트를 창업, “더 보스”로 2003 대한민국 게임대상 최우수상을 수상했고, 현재는 미국의 University of Pennsylvania에서 컴퓨터공학 석사과정을 밟으며 인공지능 로봇 연구라는 새로운 목표에 도전 중이다.
그런대로..
송재운님이 쓰신 서평보기 I 평점 I 조회수(779) I 공감 (0) I 블로그
사실 번역은 조금 매끄럽지 못한거 같기도하다... .그래도 읽어내려가는데는 무난했다 보면..루프문이 어셀블로 어떻게 처리되는지..포인터가 어떻게 처리되는지조건문이 어떻게 처리되는지..등.. 각각에 대해 처리되는 방식을 설명해놓았다.  프로그램이 로우레벨에서 어떻게 처리되는지가 관심있다면 도움이 될거 같다.  읽어볼만한 책인거 같다.   
그 다지 큰 도움이 안되는듯...
한재성님이 쓰신 서평보기 I 평점 I 조회수(841) I 공감 (0) I 블로그
소프트웨어 개발자들이 읽고 반영하여 프로그래밍하기엔다소 도움이 될만한 부분이 많지 않은듯 합니다. 책 전체에 걸쳐 고급언에 코드를 어셈 코드로의 변환된것을 보여주는것에 치중이 많은듯 합니다. 실제, 고급언어 코드에 대한 설명은 부족한듯 합니다.
SQL 전문가 가이드 [The Guide for SQL Professional](2013 Edition)...
한국데이터베이스진흥원
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
C++ 프로그래밍...
윤성우
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
쉬워지는 과학 IDL 프로그래밍...
허복행
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
 
전체평균(40)
회원평점   회원서평수 2
그런대로..
송재운 님  2007-10-07
그 다지 큰 도움이 안되는듯...
한재성 님  2007-09-14
Randall Hyde 의 최근 저서
 
The Revival of Irish Literature
7,600원
(22%↓+1%)
 
박철현 의 최근 저서
 
범죄예방론(7TH EDITION)
29,400원
(2%↓+0%)
 
Randall Hyde 의 최근 저서
 
First Impression
20,400원
(22%↓+1%)
 
The Art of Assembly Language
62,100원
(26%↓+1%)
 
Grassman's Space Analysis
17,500원
(15%↓+1%)
 
에이콘 출판사의 신간
『게임 디자인을 위한 기초 이론: 깊이 있는 게임 디자인을 위한 고민의 시작』
남기덕 저
36,000원
(10%↓+5%)
 
『파이썬으로 실무에 바로 적용하는 머신 러닝』
강봉주 저
27,000원
(10%↓+5%)
 
『자연어 처리 쿡북 with 파이썬: 파이썬으로 NLP를 구현하는 60여 가지 레시피』
크리슈나 바브사, 나레쉬 쿠마르, 프라탑 단게티 저
27,000원
(10%↓+5%)
 
『일래스틱서치 쿡북 3/e: 170가지 단계별 레시피』
알베르토 파로 저
40,500원
(10%↓+5%)
 
『Go를 활용한 머신 러닝: Go 프로그래밍 언어를 사용해 회귀분석, 분류, 클러스터링, 시계열 모델, 신경망 및 딥러닝 구현하기』
다니엘 화이트낵 저
27,000원
(10%↓+5%)
 
이메일주소수집거부