결과 >
0xbfc0a178 // 자동변수 buffer1 의 주소 0xbfc0a17c // 자동변수 buffer2 의 주소 083F7008 // 1024바이트 할당된 영역의 시작주소가 대입된 buffer1 의 값 00000409 // 1024바이트 할당된 영역의 4바이트 앞에 저장된, 영역의 크기 + 영역의 크기를 저장하기 위한 공간(4) + 메모리 정렬(4) + 1(덤) 083F7410 // buffer2 의 값 00000409 // 역시 할당영역의 크기 + 메모리 정렬(4) + 1(덤 : 왜있는지 나도 모름 조사해본적 없음) 083F7008 // free 를 해도 buffer1 의 값은 변하지 않음 00021001 // 하지만 할당영역의 크기는 파괴되어 있음 083F7008 // free로 해제후 재할당해도 동일 시작 주소에 할당됨 00000011 // 1바이트를 할당해도 17바이트란 값이 적혀 있음. 083F7018 // 16바이트 증가된 위치가 할당되어 buffer2 에 대입됨 00000011 // 12바이트를 할당해도 17바이트란 값이 적혀 있음.
즉, 마지막은 <12바이트 + 영역 크기 저장용 4바이트 = 16 바이트>에 16의 배수로 떨어지니까 메모리 정렬 없이 덤 1 만 더해진거임.
이해가 가냐?
malloc 의 할당 메카니즘은, 실은 할당 요청한 크기보다 4바이트 더 큰 크기를 할당한다.
몇 바이트나 할당되었는지를 시작주소-4 인 주소에 적어 놓고 있기 때문이다.
그리고 그 크기가 16의 배수가 되게 정렬 바이트를 추가한 뒤 최종적으로 1을 더해 놓고 있다.
이해 안간다고?
너혼자 열심히 자료 찾아보던지 그냥 존나 짜봐. 난 이딴거 파악하는데 자료찾아본적 없다.
내가 어렸을때, 연속할당시 할당크기보다 더 큰 단위로 시작주소가 넘어오기에 궁금해서 그 앞 내용들을 printf로 찍어보고 이해한 것 뿐.
그리고 내가 어제
포인터 변수 a의 연산에서
a += b; 는
a = a + sizeof(*a) * b; 라고 이야기 한건,
pseudo code 다.
엄밀히 말하면,
a = typeof(a)((unsigned int)a + sizeof(*a) * b); 겠지만
a 의 타잎으로의 캐스팅 (typeof(a) 라고 적은것)을 명시할 방법이 마땅찮아서 그냥 저렇게 적은거다.
어차피 구석구석 모르는 주제에 주절 주절 코드 복잡하게 짜서 이해했다고 위안하려고 자꾸 묻지말고, 이제 그냥 니가 존나 짜봐. 그리고 니가 짜고 생각하고 결론을 얻어낸 것을 논리적으로 너 스스로에게 확신시켜라.
이런 경우 열심히 표준과 정의를 찾는 접근은 나쁜 방법은 아니라고 봐. 하지만 난 그렇게 하지 않아. 왜냐하면, 표준을 따르지 않는 컴파일러도 많으니까. 왜 안따르냐고 컴파일러와 플랫폼 제작자에게 찾아가 따질 수도 없어. 니가 그 플랫폼에서 무언가 구현해야한다면, 그나라의 현행법이 중요한거지, 국제법이 중요한게 아냐. 그걸 일일이 따지고 넘어가는건 시간낭비라고 봐.
이론과 표준은 구현을 위해 존재하는거다. 군대 잘 다녀와.
이제 글도안올릴거임 글고 난 이떄까지 포인터때문에 코딩막힌적은 단 한번도없음. 그리고 니가 나한테 좇도모른다고하는데 좇도모르는데 결과는 잘나옴
http://gall.dcinside.com/programming/498971
이코드또한마찬가지임. 그리고내가좇도모른다고? 좇도모르는애가 이걸어떻게짬? 그리고 니처럼 잘알아도 결과물은 나같은사람이ㅏㅇ 비슷해질수잇지않나? 그리고 난 내가 잘못이해하고잇는 부분으로인해서 프로그램의 퍼포먼스를 떨어뜨렷던적은없는데 ? 아직1년도 안해본좇밥이할말은아니지만 좇같아서시발
좆같으면 질문하지마. 너 혼자 알아서 잘 해.
되도 않은 질문을 몇일동안 하는거냐? 책이나 좀 찾아보던가. 그만하면 알겠다고 자신이 붙었으면 시발 걍 니가 알아서 잘 하던가.
니가 니같은 새끼 가르친다고 생각해봐. 끝도 없이 같은거 질문하는 새끼. 새겨 듣지도 않기 지 맘대로 해석하는 새끼. 겨우 갈쳐놨다 싶으면 또 사족 달아서 정의 망가뜨리는 새끼. 변수도 대입도 모르면서 동적 할당 예제 드리대는 새끼.
그리곤 좆같다고 욕하는 새끼 ㅋㅋ
ㅈㅅ
http://gall.dcinside.com/programming/498971
<-- 조금 이해한 정도지. 고작 이걸 뭐 자꾸 마스터했단 식으로 확인하려들고 되묻는거냐? 이게 제대로된 프로그램이냐? 예제 코드지.
너랑 나랑 프로그램짜면 비슷할것 같냐? 넌 어차피 게임같은거 짜지도 못하겠지만 니가 캐릭터 수없이 동적할당해서 돌아다니다 죽고 태어나고 돌아다니다 죽고 태어나고 하는 시스템 만들면 니 메모리는 다 조각나 할당도 못하고 뻗어. 그게 너랑 나랑의 차이야. 물론 속도 이런건 말할 필요도 없고.
ㅈㅅ
프로그래밍은 너와 니 컴퓨터와의 대화야. 그걸 컴파일러가 돕는거고. 자꾸 다른 사람한테 확인하려 들지마. 너 혼자 힘으로도 멀리 날아갈 수 있어.
ㅇㅋ
이거 ㄹㅇ 모르면 무조건 출력찍어보면서 보는것도 굿잡.
아..좀잇다 ㅅㅅㅅ오면 또 한 소리하겟네... 벌써좆같. 네...
ㅅㅅㅅ는 너한테 어느정도로 철저해져야 고수가 되는지에 관해 자기가 깨달은 과정을 보여주고 있는거야. 너한테 관심을 보인거고. 네 질문하는 주제와 태도에 대해서도 지적하고 있어. 그걸 약으로 받아들여야해. 꼬우면 더 잘나지던가. 너도 이미 느끼고 있는 이야기들이겠지만 : )
피자 잘먹었읍니다
'자꾸 다른 사람한테 확인하려 들지마. 너 혼자 힘으로도 멀리 날아갈 수 있어.' 지금 소름돋음