malloc(1) has a block size of 16
malloc(8) has a block size of 16
malloc(14) has a block size of 16
malloc(16) has a block size of 16
malloc(32) has a block size of 32
malloc(48) has a block size of 48
malloc(64) has a block size of 64
malloc(100) has a block size of 112
위의 코드는 Advanced Mac OS X Programming 이라는 책에서 참고했습니다.
* malloc()은 유닉스/리눅스의 시스템 호출 brk() 및 mmap()을 wrapping한 C 함수입니다. 즉, brk()로 할당받고, 이를 특정 자료구조로 관리합니다. 자료구조는 시스템별로 구현에 따라 상이합니다. 여기까지는 위에서 여러 논객들이 논의한 바이고, 한번에 할당되는 메모리 양은 (관리구조를 위한 크기+사용자요청크기)가 되겠습니다.
* glibc의 경우는 제가 한번 해본적이 있습니다만, glibc버전에 따라 상이할 것으로 보입니다.
malloc()으로 얼마나 많은 메모리가 실제로 할당되었는지 알아보는 함수중에서
BSD 라이브러리 함수중에는 malloc_size()이라는 것이 있네요.
참고로, FreeBSD에는 이런 함수가 없습니다.
google에서 malloc_size를 검색해보면 최상단에 malloc_isze에 대한 man page가 검색이 되는데 이 녀석이 Mac OS X 의 man page인데 상단에 BSD Library Functions Manual 이라고 되어 있습니다.
그래서 jsunam님이 착각하신듯 합니다.
그리고 또 재밌는 것은 Darwin man page를 검색해보면 그곳에는 또 FreeBSD Library Functions Manual 이라고 뜨네요 :)
기본적으로 제공되는 방법이 있나요?제경우 찾지못했습니다. 혹시 찾
기본적으로 제공되는 방법이 있나요?
제경우 찾지못했습니다. 혹시 찾으신 분있으면 알려주시구요..
동료직원의 도움으로 아래와 같은 방법으로 비슷한 문제를 해결한 적이 있습니다.
==============
malloc과 free를 재작성합니다.(M_malloc, M_free라고 가정하죠.)
M_malloc으로 메모리를 요청하는 경우 요청사이즈보다 4byte 크게 malloc합니다. 4byte 크게 잡은 부분에 궁금해 하시는 할당한 메모리크기를 넣어두세요. (큰 메모리를 다루실꺼면.. 이부분을 늘려도 되겠습니다.)
M_malloc에서 return하는 포인터는 4byte를 skip한 이후의 addr를 반환하는 거죠..
M_free에서는 전달받은 포인터의 4byte 앞의 주소를 free하면 되겠죠..
=================================
나비아빠
malloc 의 인자 자체가 원하는 용량인데 모르는 것이 말이 안되지 않
malloc 의 인자 자체가 원하는 용량인데 모르는 것이 말이 안되지 않나요?
10개 달라고 해놓고 9개 받는경우는 없습니다.
12개를 받는경우도 없구요.
10개보다 못 받을 상황이면 ( 9개 밖에 못 받을 상황이면 ) 무조건 malloc 의 리턴 인자가 NULL 입니다. ( 즉 실패 입니다. )
12 개를 줄수 있어도 10개만 쓰게 하면 됩니다.
( 강제로 그 10개 뒤에 뭔가 써버릴수는 있겠죠. 이건 전적으로 프로그래머 잘 못 입니다. 애초에 자신의 사이즈를 알고 메모리를 할당받아야지 모르고 할당받는것은 말이 안됩니다. )
Neogeo - Future is Now.
ㅎㅎ
library간에 넘겨주고 그러면 모를수도 있죠 뭐~
앞 분 처럼, 재작성해서 정보를 넣는 방법이 유력해 보이는군요 ㅎㅎ
free 함수가 해제해야할 메모리의 크기를 알고있는걸 보면 뭔가 방법이
free 함수가 해제해야할 메모리의 크기를 알고있는걸 보면 뭔가 방법이 있지 않을까요?
======================
BLOG : http://superkkt.com
[quote="superkkt"]free 함수가 해제해야할 메모리의 크기
표준적인 방법은 없습니다.
ps. allocation table을 따로 두어 관리하는 방법, 위의 분 예제 처럼 allocation된 memory의 처음 부분에 length를 기록하는 방법, ... 등등 제 각각입니다.
----------------------------------------
http://moim.at
http://mkhq.co.kr
malloc()으로 얼마나 많은 메모리가 실제로 할당되었는지 알아보는 함
malloc()으로 얼마나 많은 메모리가 실제로 할당되었는지 알아보는 함수중에서
BSD 라이브러리 함수중에는 malloc_size()이라는 것이 있네요.
위의 코드를 제 pc에서 실행한 결과는 다음과 같습니다.
위의 코드는 Advanced Mac OS X Programming 이라는 책에서 참고했습니다.
* malloc()은 유닉스/리눅스의 시스템 호출 brk() 및 mmap
* malloc()은 유닉스/리눅스의 시스템 호출 brk() 및 mmap()을 wrapping한 C 함수입니다. 즉, brk()로 할당받고, 이를 특정 자료구조로 관리합니다. 자료구조는 시스템별로 구현에 따라 상이합니다. 여기까지는 위에서 여러 논객들이 논의한 바이고, 한번에 할당되는 메모리 양은 (관리구조를 위한 크기+사용자요청크기)가 되겠습니다.
* glibc의 경우는 제가 한번 해본적이 있습니다만, glibc버전에 따라 상이할 것으로 보입니다.
* 다음 URL을 참고해 보세요.
http://www-128.ibm.com/developerworks/kr/library/l-memory
- 영문 문서를 번역해 놓은 것입니다.(물론 제가 안했음 ^^;)
- 이 곳에서 취한 방법은 glibc하고 1바이트정도 차이가 나던데....
* 그외 memory leak debug등의 검색어로 검색하면 좋은 정보 많이 찾으실듯.
답변입니다.
size of 을 이용해서 필요한 함수에 사이즈를 출력하면 될듯 싶습니다.
[quote="jsunam"]malloc()으로 얼마나 많은 메모리가 실
참고로, FreeBSD에는 이런 함수가 없습니다.
----
Let's shut up and code.
[quote="sangwoo"][quote="jsunam"]malloc(
google에서 malloc_size를 검색해보면 최상단에 malloc_isze에 대한 man page가 검색이 되는데 이 녀석이 Mac OS X 의 man page인데 상단에 BSD Library Functions Manual 이라고 되어 있습니다.
그래서 jsunam님이 착각하신듯 합니다.
그리고 또 재밌는 것은 Darwin man page를 검색해보면 그곳에는 또 FreeBSD Library Functions Manual 이라고 뜨네요 :)
[url]http://joinc.co.kr/modules.php?op=m
http://joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=30783&forum=3
제 졸문이 하나 있습니다만, 도움이 되실것 같습니다.http://
제 졸문이 하나 있습니다만, 도움이 되실것 같습니다.
http://bbs.kldp.org/viewtopic.php?t=1244
---
http://coolengineer.com
댓글 달기