함수 | 원형 | 하는 일 | 리턴값 |
memset | void *memset(void *str, int c, size_t n) | memset(위치, 값, 크기). 위치에 값을 크기만큼 채우기 | str (이것 관련해서 hn에서 논쟁이 있었는데..TBW) |
memcpy | |||
memccpy | void *memccpy(void *dest, const void *src, int c, size_t n); | src에서 dest로 n바이트 복사하며 도중에 문자 c를 만나면....TBW | |
memmove | |||
memchr | 메모리에서 문자 찾기 | ||
memcmp | |||
memicmp | 대소문자 구분없이 비교 |
}
LINKTHESE:
주소,address
메모리_관리,memory_management
MMU
메모리_할당,memory_allocation
동적_메모리_할당,dynamic_memory_allocation
{
할당받은 메모리는 사용이 끝나면 해제(free)해야 함.
동적 메모리를 해제하지 않아서 가용 메모리가 줄어드는 현상은 memory_leak.
주소,address
메모리_관리,memory_management
MMU
메모리_할당,memory_allocation
동적_메모리_할당,dynamic_memory_allocation
{
할당받은 메모리는 사용이 끝나면 해제(free)해야 함.
동적 메모리를 해제하지 않아서 가용 메모리가 줄어드는 현상은 memory_leak.
}
garbage_collection
reference/dereference
call_by_reference
reference_counting
memory_leak
garbage_collection
reference/dereference
call_by_reference
reference_counting
memory_leak
1. 포인터란 ¶
주소,address(esp 메모리,memory의 메모리주소,memory_address)를 담는 변수,variable.
i.e.
포인터에 들어가는 값은 메모리 주소. 메모리상의 어떤 위치.
i.e.
포인터에 들어가는 값은 메모리 주소. 메모리상의 어떤 위치.
C에서 선언은
char *i; int *j;
*가 typename에 붙는가, variable name에 붙는가에 대한 convention도 있는데 나중에.
3. 포인터의 증감 ¶
C의 경우
포인터에 증감(증가 increment ++ 감소 decrement --) 연산을 하면, 그 값이 하나씩 변하는 것이 아니라 (포인터가 가리키는 type?)의 size만큼 증감.
7. Dangling pointer ¶
AKA 미결합 포인터, 댕글링 포인터, 허상 포인터(WpKo), 와일드 포인터(wild pointer)
Ex.
#include <stdio.h> void func(int *p) { int b = 10; p = &b; printf("*p = %d\n", *p); } int main() { int *a; func(a); printf("*a = %d\n", *a); }
8. void 포인터 (C) ¶
int main() { int i = 0; float f = 1.0f; void *p; p = &i; *(int *)p = 2; p = &f; *(float *)p = 3.0f; }