C, 키워드 포인터 주소값 모든 데이터는 해당 데이터를 담고 있는 주소값을 가지고 있다. 여기서 주소값이란 데이터가 저장되어 있는 메모리의 위치. 만약 int형 데이터를 선언한다면, 해당 시작 주소값으로부터 4byte만큼의 메모리 영역을 사용하게 된다. 포인터의 개념 여기서 해당 int 자료형의 첫번째 주소값을 가르키도록 선언할 수 있는데, 이것을 포인터라고 한다. int n = 100; // 변수의 선언 int *ptr = &n; // 포인터의 선언 포인터의 연산자 해당 데이터가 저장되어있는 첫번째 주소값은 주소연산자(&) 로 표현하고 이를 가르키는 포인터는 참조연산자(*)로 선언하게 된다. 여기서 주소 연산자 앰퍼샌드(ampersand)라고 부르며, 사용법은 위에 보이는 예시와 같이 변수 이름 앞에 ..
CSAPP 프로세서 데이터 전송 대부분의 데이터 전달은 레지스터를 통해서 일어난다. (rax, rsi, r8 등등) 레지스터에 저장되는 값을 프로시저에서 다시 호출해 데이터를 전달하는 형식. 함수가 여섯개 이상의 정수형 인자를 가질 때, 다른 인자들은 스택으로 전달된다. (인자를 저장하는 영역이 따로 있음) 스택에서의 지역 저장 공간 지역 데이터가 스택 내부 Local variables에 저장되는 경우는 다음과 같다. 지역 변수의 수가 레지스터보다 더 많을때, 지역변수의 &연산자가 사용되어, 변수의 주소를 생성해야 할 때, 배열 또는 구조체일때 레지스터를 이용하는 지역저장소 프로그램 레지스터들은 모든 프로시저들이 공유함 피호출자 레지스터는 호출자가 나중에 사용할 경우를 고려해서 레지스터 값을 덮어쓰지 않..
백준 문제풀이 1. 1388 바닥장식 import sys input = sys.stdin.readline n, m = map(int, input().split()) plate = [] for i in range(n): row = input().rstrip() plate.append(row) count = 0 # 가로 타일 탐색 for i in range(n): flag = False for j in range(m): if plate[i][j] == "-" and flag == False: flag = True count += 1 elif flag == True and plate[i][j] == "|": flag = False for i in range(m): flag = False for j in ran..
CS:APP 1.7.3 쓰레드 쓰레드란? 프로세스는 여러개로 나뉘어서 작동하는데, 여기서 나뉜 프로세스들은 쓰레드라고 한다. 단일코어 환경 단일 코어 환경에서 쓰레드들을 병렬적으로 처리하는 방법은 시분할 방식으로 실행되는데, 이는 사실 완전히 병렬적으로 데이터를 처리하는 것이 아닌, CPU가 매우 빠르게 각 쓰레드를 번갈아가며 작업한다. 다중코어 환경 다중코어 환경에서는 병렬적으로 작업이 가능하며, 각 코어가 독립적으로 쓰레드를 실행할 수 있다. 1.7.3 가상 메모리 가상 메모리란? 하나의 프로세서가 전체 메모리만큼, 혹은 그 이상의 주소까지 접근할 수 있게 가상의 메모리 주소를 제공하는 기술. 여기서 가상의 메모리 주소는 MMU에 의해 물리적 주소로 변환된다. 가상 메모리는 프로그램이 필요로 하는 메..
백준 문제풀이 1. 2740 행렬곱샙 혼자 2중for문으로 풀려다가 시간 다날리고 결국 풀이를 확인했다. 좀만 더 생각해보면 간단히 해결할 수 있는데 너무나도 아쉬운 문제. 2. 2468 안전 영역 import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline # 1 = 강수량 1 ~ n+1 # 전체 탐색 시작 result = 0 def search_safe(result, max_value): for i in range(0, max_value + 1): visited = set() safe = 0 for y in range(n): for x in range(n): safe += dfs(i, x, y, visited) result = max(resu..
프레임워크 완성된 소프트웨어가 아니라 어떤 문제를 해결하기 위해서 만들어진 미완의 모듈로 모든 자바 개발자들이 공통으로 사용하는 기능을 미리 만들어서 제공하는 프로그램(해결해야 하는 문제 - 내가 개발해야 하는 시스템⇒ 교육시스템, 예약시스템, 인터넷뱅킹, 쇼핑몰…)재사용이 가능한 모듈, 일반적으로 프레임워크를 이용해서 개발하는 시스템들의 공통모듈들은 프레임워크에서 제공하는 기능을 이용해서 개발공통모듈 - DB연동, 트랜젝션처리, 뷰관리, 로그기록, 보안, 다국어처리, 메시징…검즘받은 프로그램으로 신뢰성 높은 시스템을 개발할 수 있다.프레임워크를 사용하면 개발자들간의 의사소통이 가능대부분 개발자들이 직접 개발하고 처리하던 작업을 프레임워크가 제공해주기 때문에 유지보수나 시스템 개발을 위해 필요한 시간을 ..
1. 학습 목표2. 학습 내용소프트웨어 프로젝트 관리의 개요프로젝트 관리의 개념프로젝트 관리 대상프로젝트 관리의 구성단계소프트웨어 프로젝트 계획프로젝트 계획프로젝트 계획 단계의 작업 과정소프트웨어 개발영역(scope, 범위) 결정소프트웨어 개발에 필요한 자원 예측소프트웨어 프로젝트 비용 예측 방법프로젝트 계획 수립 시 고려사항소프트웨어 프로젝트 비용 추정개념프로젝트 비용 결정 요소1. 학습 목표 소프트웨어 프로젝트 관리의 개요소프트웨어 프로젝트 계획소프트웨어 프로젝트 비용 추정2. 학습 내용 소프트웨어 프로젝트 관리의 개요 프로젝트 관리의 개념 프로젝트 관리소프트웨어 프로젝트를 조작하고 (organizing), 계획하며 (planning), 일정관리 (scheduling) 하는 것주어진 기간 내에 최소한..
1. 학습 목표2. 학습 내용소프트웨어 개발 생명주기 모형의 개요소프트웨어 개발 생명주기 모형폭포수 모형 (waterfall model)프로토타입 모형나선형 모형4GT 모형(4세대 기법)V모델1. 학습 목표 소프트웨어 개발 생명주기 모형의 개요폭포수 모형프로토타입 모형나선형 모형4GT 모형2. 학습 내용 소프트웨어 개발 생명주기 모형의 개요 소프트웨어 개발 생명주기 모형 소프트웨어 개발 생명주기를 표현하는 형태소프트웨어 공학 패러다임이라고도 함 폭포수 모형 (waterfall model) 개요가장 오래된 모형임많은 적용사례가 있지만 요구사항의 변경이 어려움각 단계의 결과가 확인된 후에야 다음 단계로 넘어감선형 순차적 모형으로 고전적 생명주기 모형이라고도 특징소프트웨어 개발의 각 단계를 확실히 매듭짓고 다..
1. 학습 목표2. 학습 내용소프트웨어 개발 방법론의 개요소프트웨어 공학 패러다임소프트웨어 개발 시 고려해야 하는 내용소프트웨어 개발 방법론소프트웨어 공학이 다루는 일반적인 주제소프트웨어 개발 생명주기정의역할소프트웨어 개발 생명주기의 일반적 공정과정1. 학습 목표 소프트웨어 개발 방법론의 개념을 설명할 수 있다.소프트웨어 개발 생명주기의 개요를 설명할 수 있다.소프트웨어 개발 생명주기의 일반적 공정과정을 설명할 수 있다.2. 학습 내용 소프트웨어 개발 방법론의 개요 소프트웨어 공학 패러다임 패러다임 : 사물을 바라보는 관점, 기본틀, 접근방법, 스타일 등을 의미함소프트웨어 공학 패러다임 : 소프트웨어 개발 시 고려해야 하는 개발방법, 개발환경, 개발관리 등에 대한 이론적인 체계나 접근 방법 소프트웨어의 ..
1. 학습 목표 시스템의 정의 및 고성요소에 대해 설명할 수 있다. 소프트웨어의 정의 및 특징에 대해 설명할 수 있다. 소프트웨어 공학의 발생 배경과 개념을 설명할 수 있다. 2. 학습 내용 시스템 공학 정의 시스템 어떤 목적과 기능을 수행하기 위해 유기적인 관계를 맺으며, 함께 작용하고, 서로 의존하는 요소들의 집합 각기 독자적인 목적을 가지고 있는 여러 구성요소로 이루어진 특정한 집합 예) 컴퓨터 시스템 : 하드웨어, 소프트웨어 등의 구성요소들이 서로 유기적으로 작용함 시스템 공학 시스템의 개발과 운용, 유지보수를 합리적으로 행하기 위한 사고방법, 절차, 조직 및 기법등을 총칭함 기술적 측면 : 시스템을 구성하는 물리적 요소의 적합성과 이의 효과적인 조합에 의한 효율의 극대화를 추구함 관리적 측면 :..