[루아2.1] Mem.c Mem.h

최대 1 분 소요

Mem.h

void luaI_free (void *block);
void *luaI_malloc (unsigned long size);
void *luaI_realloc (void *oldblock, unsigned long size);

char *luaI_strdup (char *str);

#define new(s)          ((s *)luaI_malloc(sizeof(s)))
#define newvector(n,s)  ((s *)luaI_malloc((n)*sizeof(s)))
#define growvector(old,n,s) ((s *)luaI_realloc(old,(n)*sizeof(s)))

Mem.h 파일은 딱히 읽을 만한 내용이 없습니다. 함수 프로토타입 선언을 제외하면 메모리 할당 함수를 luaI_malloc(), luaI_malloc(), luaI_realloc() 함수로 연결한 매크로만 있을 뿐입니다. 이 매크로는 다른 루아 구현 코드에서 메모리 할당할 때 여러곳에서 사용했습니다.

Mem.c

되게 짧은 파일입니다.

void luaI_free (void *block)
{
  *((int *)block) = -1;  /* to catch errors */
  free(block);
}


void *luaI_malloc (unsigned long size)
{
  void *block = malloc((size_t)size);
  if (block == NULL)
    lua_error("not enough memory");
  return block;
}


void *luaI_realloc (void *oldblock, unsigned long size)
{
  void *block = realloc(oldblock, (size_t)size);
  if (block == NULL)
    lua_error("not enough memory");
  return block;
}


char *luaI_strdup (char *str)
{
  char *newstr = luaI_malloc(strlen(str)+1);
  strcpy(newstr, str);
  return newstr;
}

사실상 C 표준 라이브러리의 malloc(), realloc(), free() 함수의 랩퍼 함수들입니다. 이렇게 구현한 이유는 앞으로 확장은 고려해서일겁니다. 그리고 이렇게 구현해 놓으면 다른 프랫폼으로 포팅할 때도 편합니다.

앞으로 루아가 나아갈 방향에 대한 의도가 엿보이는 구현입니다.

댓글남기기