malloc의 size 구하기.
글쓴이: whatisid / 작성시간: 목, 2003/12/04 - 4:06오후
int main() { char *str; str = (char *)malloc(100); memcpy(str,"1234567890",10); printf("%d %d %d\n",strlen(str),sizeof(str),sizeof(*str)); } 결과 : 10 4 1
malloc 사이즈인 100이 나오게 할 방법은 없는 것일까요?
(str에 담길 내용은 binary 값이 될수도 있어서 strlen은 좋은 방법이
아닐 것 같습니다.)
Forums:
[code:1]char *str; str = (ch
이 코드를
char str[100];
이렇게 변경해 주면 고민은 해결이 될거 같네요...
요즘 메모리값 똥값인데...
몇 바이트 아낄려고 용써봐야...
누가 알아봐 주는 사람 없죠...
근데... 임베딩 프로그램이나 따른 optimization 이 필요한 경우라면...
struct {} 구조로 구성을 하셔야 할듯...-_-ㅋ
아님 앞에 헤드 부분을 주덩가...
그렇지 않고선 -_-ㅋ
아주 힘든 꽁수가 필요하지 않나 생각이 드네요...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
C 표준이 보장하는 방법은 없습니다.
han.comp.lang.c 에서 알려고 하면 다친다는(-_-) 답변이 기억나네요.
크기를 기억하는 변수를 만들라는 것에 한표!
문제는 malloc(100) 의 100이 가변적이라는 겁니다.좀더
문제는 malloc(100) 의 100이 가변적이라는 겁니다.
좀더 상황을 쓰면, malloc(n) 으로 queue를 쭉 생성하는 건데요. 그렇다면
결국 queue에서 할당 사이즈인 n까지 넣어서 관리해야 하는 것일까요;;;
네.. 그렇게 해야 겠네요...
사이즈 + malloc 데이터..
이런식으로 구현해주는게 좋을꺼 같네요
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
[quote="whatisid"]문제는 malloc(100) 의 100이
그럼... str이 queue 란 말씀 이신가요(어떻게 구현을 하실려는 건지...)?
만약 이게 queue 이더라도...
가변 길이를 알 수 있는 방법은 없습니다.
얼마만큼의 데이터가 들어가 있는지...
어딘가 기록을 해야만 합니다.
그래야 알 수가 있습니다.
그러니 struct로 data, size 이 두개의 요소로 구현을 하셔야 할듯 하네요.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
Re: C 표준이 보장하는 방법은 없습니다.
str가 가르키는 메모리의 앞부분에 malloc한 싸이즈가 저장된다고 알고
있습니다만... 얼마나 앞에 있는지가 잘 기억이 나지 않는군요.
알면 다친다는 표현이 딱 맞는것이.. 이 값을 알아낼려고 앞부분으로 포인터
를 이동했다간 무슨 일이 벌어질지 예상을 못하기때문일듯합니다.
크기를 기억하는 변수를 만들라는것에 제 한표도 던지겠습니다. ^^
=============================
야후!
얼마전에 읽은 "버그 안녕(Writing Solid Code)" 책에 보
얼마전에 읽은 "버그 안녕(Writing Solid Code)" 책에 보면
malloc으로 할당한 메모리의 크기를
알기 위해서는 따로 관리를 해 주어야 하는 듯 합니다.
(ANSI C 표준에 없다면, compiler나 OS에 따라서 언제나 변경될 수 있는
상황이라서 -_-, 표준에 없으니 저 책에서 따로 관리를 해 주었겠죠...^^;;;)
@UX... Vnn~
Visual C/C++ 에서는 이렇게 하면 알수가 있군요.
Visual C/C++ 6.0 에서는 이렇게 되는군요.
#include <malloc.h>
#include <memory.h>
#include <stdio.h>
int main( )
{
char * p = (char*)malloc( 15 );
printf( "Size p = %d\n", *(int*)(p-16) );
return 1;
}
Re: C 표준이 보장하는 방법은 없습니다.
...
gcc ver 3.2.2 이고 Red Hat 3.2.2-5에서는....
gcc ver 3.2.2 이고 Red Hat 3.2.2-5에서는....
#include <malloc.h>
#include <stdio.h>
int main( )
{
char * p = (char*)malloc( 15 );
printf( "%d\n", *(int*)(p-4) );
return 1;
}
제 글이라 인용안하고 싶었는데.. 혹 참고 되실 것 같아서..ht
제 글이라 인용안하고 싶었는데.. 혹 참고 되실 것 같아서..
http://bbs.kldp.org/viewtopic.php?t=1244
---
http://coolengineer.com
댓글 달기