일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- round 420
- 이베이트미국
- persistent segment tree
- k번째 수
- Ebate USA
- 대수학
- 이베이트코리아
- 이베이트
- Algorithm
- round 424
- indexed tree
- ccw
- subgroup
- 알고리즘
- self balancing binary search tree
- 백준
- 7469
- 마일리지
- Algebraic Geometry
- BOJ
- acmicpc
- finite group
- persistent indexed tree
- Ebate Korea
- algebra
- gallian
- 아시아나
- Codeforces
- 구간쿼리
- 대한항공
- Today
- Total
목록IT (3)
출처 : https://kldp.org/node/19320 먼저1. 함수안에서 char *name = "KLDP"; char name[] = "KLDP"; 가 어떻게 다른지 ? 제가 이해하기로는name[] 은 KLDP를 위한 메모리가 할당되고 바로 그 주소를 가리키지만 return을 해도 그 메모리는 함수종료시 메모리 반환이 되므로 warning이고*name 은 메모리 어딘가에 "KLDP" 를 할당하고 그 시작점을 가리키는 포인터를 선언하고 그 주소를 넘겨주므로 (어딘가에 선언된 "KLDP"는 함수가 끝나도 유효) 함수가 종료하면서 *name이 반환되더라도 이미 return값으로 그 주소를 넘겼으므로 참조할수 있다인데 맞나요 ? 그렇다면 어딘가에 선언된 "KLDP"는 언제 메모리가 반환되나요 ? 프로그램..
글 본문에 대한 내 생각을 밝히는 것이 아니기 때문에 트랙백은 남기지 않았다. 다만 글 쓰신 Gony님이 인용하신 '조엘 온 소프트웨어'의 대목에 많은 오류가 있어서 이렇게 글을 적어본다. 물론 좁은 지면과 독자의 배경 지식을 감안해서 쉽고 간단하게 malloc() 동작 원리를 썼으리라 생각한다. 그러나 실제 방식은 이와 많이 다르다. 혹시나 오해를 가질까 해서 이 글을 쓴다.malloc이 어떻게 동작하는지 아십니까? malloc의 본질은 사용 가능한 메모리 블록을 연결 리스트linked list로 길게 연결한 자유 체인(free chain)입니다. malloc은 연결리스트를 따라가며, 요청 받은 메모리 양보다 큰 블록을 찾습니다. 이렇게 찾은 블록을 2개로 쪼개서, 하나는 호출한 사용자에게 반환하며, ..
void* realloc(void* memblock, size_t size) realloc은 기존 위치의 malloc으로 할당된 메모리 공간을 확장시키는 것이아니라 새로운 위치에 메모리를 할당 후 기존 데이터를 복사후, 기존 영역은 해제하는 방식이다. 따라서 realloc을 수행했다면 기존 위치를 가리키는 모든 포인터들의 위치를 새로운 위치로 변경해줘야 한다. 또한 새로 지정한 사이즈만큼의 공간을 할당할 수 없거나, 사이즈를 0으로 입력한경우(free와 같은 것으로 간주) NULL포인터를 리턴한다. realloc이라는 함수 이름때문에 현재 위치에서 extend한다고 생각하기 쉬운데 그렇지 않다.