malloc과 calloc의 차이

malloc과 calloc의 차이 malloc 함수와 calloc 함수의 기본적인 차이는 calloc()은 두개의 변수를 취하고 모두 0이라는 bits로 공간이 만들어지는 반면, malloc은 한개의 변수만 취하고 공간의 값이 결정되지 않았다는 것이다(indeterminate). malloc과 calloc은 메모리를 동적으로 할당하기 위해 사용하는 메모리 관리 함수이다. C언어에서, calloc()이 0으로 초기화된 buffer를 제공하고 malloc()은 메모리를 초기화되지 않은 채로 둔다. malloc과 callo의 차이를 보기 전에 기두 함수에 대한 기본적인 정보들을 보자. malloc function in C malloc은 실행중에 메모리를 할당하는 메모리 관리 함수이다. 값이 정해지지 않고 크기에 의해 구체화된 크기를 가진 객체를 위한 공간을 할당한다. ...

2023년 4월 5일 · 3 분 · 배준수

C에서 동적 메모리 할당

출처 : https://aticleworld.com/dynamic-memory-allocation-in-c/ C에서 동적 메모리 할당 이 기사에서, 저장기간이 아닌 동적 메모리 할당과 실행기간동안 메모리를 할당하는데 사용되는 함수에 관해 얘기할 것이다. 동적 메모리 할당이 가진 각각의 장단점도 살펴볼 것이다. C 표준에 따르면, 4개의 저장기간(storage duration)이 있다. : static, thread(C11), automatic, allocated. 저장기간은 객체의 일생(lifetime)을 결정한다. 일생은 객체가 살아있는 시간(저장이 보존된 시간)이며 이전에 저장된 값이 유지되는 시간이다. 객체의 일생 범위 밖에 접근하려는 행동은 정의되지 않았을 것이다. C언어에서, 우리가 프로그램을 실행할 때 얼마나 메모리가 필요한지 모른다면 작동 시간에 변수가 된다. 예를 들어, 서버통신에서 우리는 반응 데이터(response data)의 정확한 크기를 모르기 때문에 두 가지 해결책을 준비한다. 하나는 충분한 크기의 buffer를 만드는것이고 또 하나는 실행할 때 메모리를 할당하는 것이다. ...

2023년 4월 4일 · 4 분 · 배준수

3강 프로그램의 기계수준 표현(2)

CHAPTER 3 프로그램의 기계수준 표현 3.7 프로시저 프로시저 호출 : 스프트웨어에서의 주요 추상, 지정된 인자들과 리턴 값으로 특정 기능을 구현하는 코드를 감싸주는 방법을 제공 잘 설계된 소프트웨어 : 무슨 값이 게산되는가, 이 프로시저가 프로그램 상태에 무슨 효과를 갖는가 에 대한 간결한 인터페이스 정의 제공 일부 동작의 구체적인 구현은 감춰주는 방식으로 프로시저를 추상화 메커니즘으로 이용 ex. 프로시저 P가 프로시저 Q를 호출, Q가 실행한 후 다시 P로 리턴 제어권 전달 : 프로그램 카운터는 진입할 때 Q에 대한 코드의 시작주소로 설정되고, 리턴할 때는 P에서 Q를 호출하는 인스트럭션 다음의 인스트럭션으로 설정되어야 함 데이터 전달 : P는 하나 이상의 매개변수를 Q에 제공할 수 있어야 하며, Q는 다시 P로 하나의 값을 리턴할 수 있어야 함. 메모리 할당과 반납 : Q는 시작할 때 지역변수들을 위한 공간을 할당할 수도, 리턴할 때 이 저장소를 반납할 수 있음. 3.7.1 런타임 스택 C언어와 다른 대부분의 언어에서의 프로시저 호출 동작방식 : 스택 자료구조가 제공하는 후입선출 메모리 관리 방식을 활용 ...

2023년 3월 29일 · 2 분 · 배준수

3강 프로그램의 기계수준 표현(1)

Chapter 3 프로그램의 기계수준 표현 컴퓨터 : 데이터를 처리하고, 메모리를 관리하고, 저장장치에 데이터를 읽거나 쓰고, 네트워크를 통해 통신하는 등의 하위 동작들을 인코딩한 연속된 바이트인 기계어 코드(machinc code)를 실행한다. 컴파일러 : 프로그램 언어의 규칙, 대상 컴퓨터의 인스트럭션 집합, 운영체제의 관례 등에 따라 기계어 코드 생성 GCC C 컴파일러 : 기계어 코드를 문자로 표시한 어셈블리 코드의 형태로 출력을 만들어 프로그램의 각 인스트럭션 생성 GCC : 어셈블러와 링커 호출 => 어셈블리 코드로부터 실행 가능한 기계어 코드 생성 ...

2023년 3월 28일 · 15 분 · 배준수

파이썬 알고리즘 3주차 : 동전, LCS, 평범한 배낭, 행렬 곱셈 순서

개발 진행 및 완료 상황 3주차 python algorithm 난이도 중 이하 문제 풀이 완료 CSAPP 3.3 까지 공부 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 9084 동전(https://www.acmicpc.net/problem/9084) 풀이 과정 : j원을 만들 수 있는 경우의 수를 dp[j]라 한다면 동전의 한 종류인 i원을 더한 j+i원을 만드는 경우의 수도 dp[j+i]를 더함으로서 구할 수 있다. 정답코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import sys ans = [] t = int(sys.stdin.readline()) for _ in range(t): n = int(sys.stdin.readline()) coin = list(map(int,sys.stdin.readline().split())) m = int(sys.stdin.readline()) dp = [0] * 10001 dp[0] = 1 for i in coin: for j in range(1,m+1): if j-i >= 0: dp[j] += dp[j-i] ans.append(dp[m]) print(*ans, sep='\n') 출처 : ...

2023년 3월 28일 · 4 분 · 배준수

습관

2023-03-27 습관 이 곳에 온지 한 달이 된 날이다. 어느덧 파이썬 알고리즘은 마지막 주차에 들어섰다. 잘해왔다 라고 말하기는 많이 부족하다. 그래도 조금씩 더 나아지고 있는 모습을 스스로에게 찾을 수 있는 건 참 다행이라는 생각이 들었다. 저번 달의 나와 비교하면 참 많은것이 변했다. 이제 남들의 말을 조금은 더 잘 알아들을 수 있게 되었다. 생소한 단어 투성이였던 주변 사람들의 대화는 이제 무슨 이야기인지는 알겠다. 물론 그 개념을 완벽하게 이해하고 있는 것은 또 다른 얘기긴 하지만 말이다. 최선의, 최단의 ...

2023년 3월 27일 · 4 분 · 배준수

2. 시작하기(3)

삽입 정렬 : 점진적인 방법 사용 원소 A[j]를 정렬된 부분 배열 A[1 .. j-1]의 적절한 위치에 삽입 2.3.1 분할정복 접근법 재귀적 구조 : 주어진 문제를 풀기 위해 자기 자신을 재귀적으로 여러 번 호출함으로써 밀접하게 연관된 부분 문제를 다룸. => 분할정복 접근법 분할정복 접근법 : 전체 문제를 원래 문제와 유사하지만 크기가 작은 몇 개의 부분 문제로 분할하고, 부분 문제를 재귀적으로 품. 찾은 해를 결합하여 원래 문제의 해를 만들어 낸다. 분할정복의 3단계 ...

2023년 3월 25일 · 5 분 · 배준수

2. 시작하기(2)

2.2 알고리즘의 분석 알고리즘의 분석은 그 알고리즘을 실행하는 데 필요한 자원을 예측하는 것을 의미한다. 메모리, 통신 대역, 하드웨어 등 대부분은 계산 시간을 의미한다. 이 책에서의 가정 알고리즘은 단일 프로세서와 랜덤 접근 기계(RAM, random-access machine) 모델로 가정 : 명령어는 동시X, 하나씩 실행 산술 연산, 데이터 이동연산, 제어 연산 등 : 상수 시간 RAM 모델의 데이터형 : 정수(integer)와 부동소수(floating point) 각 워드 크기에 제한을 가정 : 입력 크기가 n인 입력을 다룰 때 정수는 상수 c>= 1에 대해 clg2비트로 표현된다고 가정(워드는 상수로 처리하므로 너무 크면 안된다.) ...

2023년 3월 24일 · 3 분 · 배준수

2. 시작하기(1)

2.1 삽입정렬 정렬문제 입력 : n개 수들의 수열 $$ <a_1, a_2, …, a_n> $$ 출력 : $$ a’_1 <= a’_2 <= … <= a’_n $$ 을 만족하는 입력 수열의 순열(재배치) $$ <a’_1,a’_2, …, a’_n> $$ 정렬하고자 하는 숫자를 키라고 한다. 의사코드와 “실제” 프로그램 코드의 차이는, 의사 코드에서는 알고리즘을 가장 분명하고 간결하게 서술할 수 있다면 어떤 표현 방법을 사용해도 좋음. 영어, 한글 문장등이 들어갈 수 도 있음. 데이터 추상화, 모듈화, 오류처리 등의 소프트웨어 공학 관점의 문제를 고려하지 않음. ...

2023년 3월 21일 · 5 분 · 배준수

파이썬 알고리즘 3주차 : 줄 세우기

1.개발 진행 및 완료상황 2주차 python algorithm 문제풀이 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 2252 2252번: 줄 세우기 2252번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 줄 세우기 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 37709 21883 14481 56.278% 문제 N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다. 일부 학생들의 키를 비교한 결과가 주어졌을 때, … ...

2023년 3월 21일 · 2 분 · 배준수