[운영체제실무] 동적 메모리 할당 / 임시파일
📌 동적 메모리 할당
- 프로그램 실행하면서 필요에 따라 데이터를 저장할 수 있는 메모리를 할당
- 동적 메모리 할당/해제
- void*malloc(size_t size)
- size 바이트의 메모리 할당함
- 메모리 할당이 성공하면 할당한 블록 포인터를 반환하고 실패하면 NULL 포인터를 반환
- void free(void *ptr)
- 동적으로 할당된 메모리를 반납
- void *calloc(size_t nelem, size_t elsize)
- 배열과 같이 연속된 elsize의 크기로 nelem개의 동적 메모리 할당
- 메모리를 모두 0으로 초기화(malloc 함수는 0으로 초기화하지 않음)
- void realloc(void prt, size_t size)
- 매개변수 ptr은 malloc, calloc, realloc 함수에서 리턴한 메모리 영역을 가리키는 포인터
- size는 새롭게 추가한 메모리 바이트 수
- 매개변수 ptr이 가리키는 이전 메모리 영역의 내용을 새롭게 할당한 메모리 영역에 복사
✍ 실습
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
int i;
int n;
int j;
int* prime_arr;
if (argc < 2) {
printf("prime input\n");
exit(0);
}
n = atoi(argv[1]);
prime_arr = (int*)malloc(sizeof(int) * n);
if (n <= 1) {
printf("input great than 2\n");
exit(0);
}
for (i = 2; i < n; i++)
prime_arr[i] = 1;
for (i = 2; i * i <= n; i++) {
if (prime_arr[i])
for (j = i * i; j <= n; j += i)
prime_arr[j] = 0;
}
for (i = 2; i <= n; i++)
if (prime_arr[i])
printf("%d ", i);
printf("\n");
return 0;
}
✍ 입력
10
💻 출력
2 3 5 7 //소수
📌 임시파일
- 프로그램이 임시 파일을 만들 때 다른 프로그램이 사용하지 않는 파일명 만듦
- stdlib.h 를 포함
- char mktemp(char templeate)
- template는 임시 파일명
- 파일 이름에는 여섯 개의 x를 포함시킴
- x에는 프로세스 번호와 같은 문자로 채워짐
- 파일명을 만들지 못하면 빈 문자열을 반환
- 저수준 입출력 사용시 mkstemp
✍ 실습
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char* tempf;
char* template;
FILE* fp;
strcpy(template, "./tempXXXXXX");
tempf = mktemp(template);
if (strlen(tempf) == 0) { //파일을 만들지 못하면
perror("cannot make %s");
exit(1);
}
fp = fopen(tempf, "w");
fprintf(fp, "Hello");
}
📌 문자열 숫자 변환
- 문자열을 정수로 변환
- int atoi(const char str) : str로 입력된 문자열을 정수(int형)로 변환
-long atol(const char str) : str로 입력된 문자열을 정수 (long형)로 변환- double atof(const char *str): str로 입력된 문자열을 실수(double형)로 변환
- long strtol(const char *str, char **ptr, int base) : str로 입력된 문자열을 정수(long형)로 변환, 단 str이 여러 숫자로 표시된 문자열일 경우 반복하여 숫자로 변환
- str의 문자열을 base로 나온 숫자로 변경함
- str이 base와 맞지 않는 숫자가 나오면 무시함
- unsigned long strtoul(const char *str, char **ptr, int base) : str로 입력된 문자열을 양의 정수(unsinged long형)로 변환
- double strtod(const char *str, char **prt) : str로 입력된 실수문자열을 실수(double형)로 변환
Author And Source
이 문제에 관하여([운영체제실무] 동적 메모리 할당 / 임시파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ming_/운영체제실무-동적-메모리-할당-임시파일저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)