CPUとメモリ データの配置 配列型 コンパイラの動作 メモリのアクセス

••-)¹y
CPU"|}~
CPU
|}~
32bit
‘’“
”'
X•Y-
VWXYŽY
64bit
8bit
R
•d–—
R
•O0262P/ 10 9SI2
a = 10;
i,j+b[0] = 20;
b[1] = b[0] + a;
b[0]
•O0266+0*4P/ 20 9SI2
•O0266+0*4P"O0262P)ª
Q9Ÿ’•34)«¬9
QO0266+1*4P/SI2
··^%3OxP% x bMq>24byte^¸2"72
b[0]
b[1]
i,j+k)§t
•&'/Š‹K|}~)®¯9Ÿ’72
•°&'•/±²)VWXY9‚ƒ³12
•'´93VWXY9xG{žµ/&¶72
|}~)VefY
&')VefY/Š‹Kno
• ˜—•d7™d&'%3€)VWXYbMq>
2b
• &'5_`aIJG2cda%3GšMb
i,j+k)›œRw•
• VWXY9žŸ’•KšJ‡G
• &')cda)Z ?/!Tint, double K€U
9xG2)^3¡¢G/šG<>{3cda)
£G¢G9¤¥¦e•JšI2
*+,-
•¹º%|}~»/µ/¨©aI2
D)¼r
a[0]
i,j+k5
lm72no
•&' a
pqr0262
cdar4
stuvr4
•&' b
pqr0266
cdar8
stuvr4
•int a[3]; "•J¹º9½¾•{¿F
¨©aI2ÀÁ%“^ 12byte
a[x] % 0262 + (x * 4) bMq>2 4byte
•double d[10] )‡Ã/•{¿F
Q¨©aI2ÀÁ%“^ 80byte
d[x] % 0262 + (x * 8) bMq>2 8byte
a[1]
a[2]
*+,-&'"*+,-)!
VWXY
QQR
0262
0263
0264
0265
0266
QQR
QQR
8bit
a
& : &'•bM)VWXYH„
Q&a % 0262 "K2
Q&(b[0]) % 0266 "K2
* : VWXY/‡2|}~VefY
Q*(0262) ^&' a (VefY
QQ^d2bˆ
QQ‰stuv)no5Š‹
QQR
0262
0263
0264
0265
0266
QQR
QQR
a
b
p
main() {
int a, b, *p;
a = 10;
p = &a;
b = *p;
*p = 20;
}
1.
2.
3.
4.
/*
/*
/*
/*
1
2
3
4
*/
*/
*/
*/
p % int !)
QQQ*+,-&'
•p /% int )&')
QVWXY9ZS72
Q[5\]2
•*p ^3p /_`aI
QJG2VWXYbM3
Qint )cda^
QVefY^d2
a / 10 5S2
p / 262 5S2
b / a )8T10U5S2
a / 20 5S2
*+,-)gh
main() {
int a, b[2];
QRRR
}
i,j+k5lm72no)wx
•&' a )pqvyTVWXYU9
z?{G
•VWXY9xGJ|}~st•{G
b[0]
b[1]
i,j+k5
lm72no
•&' a
pqr0262
cdar4
stuvr4
•&' b
pqr0266
cdar8
stuvr4
int a;
int *p;
p = &a;
main() {
int a, b[2];
QRRR
}
¹º!
8bit
•double r; "•{¿F
r % 0120 - 0127
R|}~9 12byte ¨©
QTpqvyr0262U
}
a
8bit
VWXY
QQR
0120
0121 &'a
0122
QQR
QQR
QQR &'b
i,j+k)§t
a
8bit
double (64bit = 8byte)
|}~ •|}~%8bit=1byte9
uv/3_`72no
8bit
VWXY
)cda/F ÄJÅ
xaI2
QQR
0120
•˜—•d%3°ÀÁ
0121
9Æ">"Ç/•JÈÃ
0122
QQR &'r D)¼r
QQR
•int a, b; "•{¿F
QQR
a % 0120 - 0123
b % 0124 - 0127
˜—\•
main() {
int a, b[2];
b[1]
VWXY
QQR
0262
0263
0264
0265
0266
QQR
QQR
8bit
R
••-ŽY
Œ'X•Y-
VWXY
QQR
0262
0263
0264
0265
0266
QQR
QQR
VWXY
0000
0001
0002
0003
int (32bit = 4byte)
|}~
VWXY
QQR
0262
0263
0264
QQR
QQR
QQR
)@A
K€
pqvyr&'•/‚ƒ
cdarsizeof(..) ^H„…†
stuvr!/‚ƒ
!"#$
p %int&'()*+,-
a %int&'
int *p;
p = &a;
* %*+,-)./012"3
4)*+,-56789:;
72<=>?3int !
& %&')./012"3
4)!()*+,-9:;72<
=>?3int !()*+,-
NC%Oint!P
NC%Oint!()*+,-P
BC"DC)E?FG5HIJGK1ILKMKG<
int !
a
*p
int !()*+,&a
p
ê'"*+,a
void change(int *x) {
*x = 100;
}
int main() {
int a = 10;
x
change(&a);
int main() {
int a[2] = {10, 20};
int *y = a;
a[0]
*a
a[1]
*(a+1)
y[1]
*(y+1)
y
int *p;
x.a
• ÅG×
struct foo {
int a;
double d;
};
i,j+-
ÉÊË)w•
•|,Ž a %cda 4byte ^3
pqvy% x )ÌÍbM 0
¹º/‚72w•
• óôK!9Æ">"Ç/\]2
• õö"i÷•^d2
struct hoge a, b;
a = b;
•|,Ž d %cda 8byte ^3
pqvy% x )ÌÍbM 4
•x )!% struct foo ! Tfoo %-Ε"GÃU
x
•x.a )!% int
x.d
•x.d )!% double
˜—ø7a3•dø7a
• °‹ì/:;)¸2•.9012[5\]2
• ÉÊË)ÝÞ%3-Ε/‡?ùwx^d2
Ø{M@Ù(free)72
– @Ù•K1IL€Õ€Õ|}~5ÚÛaI2
ÉÊË)t?ÜRÅGÜ
struct st1 {
int a, b;
}
struct st2 {
struct st1 s;
double c[3];
}
struct st1 x;
struct st2 y;
x.a =10;
y.c[0] = 10.5;
y.s = x;
y.s.b = 20;
!"K&'½¾
ÉÊË()*+,•
t?ÜTÝÞ"½¾U
• ÉÊË9SI2·"5…†
• ¹º9SI2·"ß…†
• -Ε9xGJGš=^ßàá!
)ÉÊË9t2[5…†
ÅGÜ
• |,Ž(VefY72‘’â.
%3ã1JÅÃ[5\]2
struct st1 {
int a, b;
}
struct st1 x;
struct st1 *y;
y = &x;
(*y).a = 100;
y->b = 200;
ÉÊË967*+,-5Åè2
• ‘’â*)ú̵v%.ø[]
‡?)G·"/Ð:*
• ÉÊË()*+,-9+,/
ÈÑ’â->5x:aIJG
2
m->n % (*m).n "ûü
• äaI{#åº)
Yæ•Y)ç'9
{ 'èJé7ê'
• p++ ^3#åº)
ë)‹ì(ím‚
î9ï§72
}
•x %cda 12byte
struct foo x;
• Š‹K"d/Š‹KÏ1|}~9¨©72
– cda)Ÿ’/Ð:Tsizeof() 9ÅÃ[U
– !)&¶TÑÒYÓU9dÔÕ"72)5Ö>•G
y[0]
*y
•*+,-&'()ý’%VWXY()
ý’^%Kš3stuvT!)cdaU9
þá{8)ý’"K2
•*+,-%¹º"•J3>{ÿ/¹º%
*+,-"•JÅÃ[5\]2
•a[0] " *a %ûü
•a[1] " *(a+1)%ûü
for( ; *p != ‘¥0’; p++)
if(*p == ‘ ‘) {
cnt++;
}
}
return cnt;
ÉÊË
Malloc() " free()
p = (int *)malloc(100 * sizeof(int));
*p = 100;
p[99] = 200;
free(p);
int spacecnt(char *p) {
int cnt = 0;
QQy[0] = 100;
*(y+1) = 200;
*a = 1000;
*(a+1) = 2000;
}
}
•a /_`aI{8^%Kš3&' a )*+,-TVWX
YU9ê' change (ðè2[^3&' a )ñò9•
d¶è2[5\]2Tê'bM89é7[5\]2U
*+,-)ƒx¼
*+,-"¹º
int *a[3]; Q int *(a[3]) "àá
Oa %‹ì' 3 )¹º^34)¹
º)°‹ì%int ()*+,-P
•
int (*b)[3];
Ob %*+,-^34)*+,-56
7Ì%‹ì' 3 )¹º<4)¹º
)°‹ì% intP
•
struct list {
int data;
struct list *p1, *p2;
} x;
Ox % int !)ÀÁ data "3#$
#%"àá!)ÉÊË967*+
,-p9|,Ž/&=ÉÊËP
a[0]
a[1]
a[2]
int
int
int
int
int
b
data
p1
p2
'9(ØJ¸2
“$5±²/¨
©aI2|}~
int
data
p1
p2
data
p1
p2
data
p1
p2
data
p1
p2