c기초질문임돠2..

oranke의 이미지

음..
요새 C를 공부하고 있는데..
예전에 건성으로 배울때(?) 와는 사뭇 다르네요..^^;

다시 질문으로 가서..

#include <stdio.h>

typedef struct
{
   char ch;
   long i;
}_data2;

void main()
{
   printf("sizeof(_data2) is %d\n", sizeof(_data2));
}

사이즈가 5가 아닌 8이 나오는 이유는 뭔가요?

nil999의 이미지

alignment로 한번 검색해 보세요.
--자주 올라오는 질문에네요.

ㅎ~~ㅠ

rapzzard의 이미지

정렬제한으로 인한 패딩때문에 그렇습니다..
자세한 내용은 정렬제한이나 패딩따위의 검색어로 검색해보시면..
많이 나올것같습니다..

dreamer의 이미지

구조체의 경우에는 메모리 정렬을 해서 최적화를 합니다.
이렇게 되면 사이즈는 커져도 속도가 빨라 지죠..
보통 32bit의 데이타 사이즈 cpu를 사용하기때문에 정렬도
4byte단위로 하죠..
그래서 4, 8, 12...등의 순으로 정렬됩니다.
이 부분도 검색해 보면 많이 있는데...귀찬아서리 직접 해보시길..

se7en3rd의 이미지

데이터 버스의 크기와 어드레싱을 생각해 보면 쉽게 알 수 있습니다.
보통 32비트 머신의 데이터 버스의 크기는 당연히 32비트, 즉 4바이트가 되고요, 특정 메모리 번지에서 한번에 읽어올수 있는 데이터의 크기는 4바이트가 됩니다.
님의 경우와 같이 선언을 했을때, 만약 MMU가 5바이트를 그대로 붙여서 할당을 했다면, ch를 억세스 할 경우 한번의 메모리 접근으로 가져올 수 있습니다.
한번에 4바이트를 읽어오니깐 1바이트 ch와 4바이트 i의 상위 3바이트를 가져오게되는 거죠.
그런데 i를 읽기 위해서는 2번의 메모리 참조가 있어야 합니다. 처음 접근으로 i의 상위 3바이트를 가져오고, 다음 접근으로 i의 나머지 1바이트를 읽어온 후, 이 둘을 합쳐서 4바이트 i를 만들어야 하는 거죠..
이런 이유에서 컴파일러는 4바이트 alignment를 수행합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.