スタックはスタック、スタックはスタック
7580 ワード
,
, :
: : , 。
: “ ” , !
: , 。
【1】
(1)
C/C++
<1> (stack)— , , 。
<2> (heap) — , , OS 。 :new、malloc、delete、free 。
<3> ( )(static)— , , 。
<4> — 。
<5> — 。
(2)
, , , 。 。
1 int a = 0; //
2 char *p1; //
3 void main( )
4 {
5 int b; //
6 char s[] = "abc"; //
7 char *p2; //
8 char *p3 = "123456"; //123456\0 ; p3 。
9 static int c =0; // ( )
10 char *p1 = (char *)malloc(10);
11 char *p2 = (char *)malloc(20);
12 // 10 20 。
13 strcpy(p1,"123456"); //123456\0 , p3 "123456" 。
14 }
【2】
(1)
(heap) (stack) 。
(2)
<1>
stack:
。 : int b; b 。
heap:
, , c malloc
char *p1 = (char *)malloc(10);
C++ new
char *p2 = new char[10];
, p1、p2 。
<2>
:
, , 。
:
, , , ,
, 。
, , , delete 。
, , 。
<3>
:
Windows , , 。
, WINDOWS , 2M( 1M, ),
, overflow。 , 。
:
, 。 , ,
。 。
, , 。
<4>
:
, 。 。
:
new , , , 。
, WINDOWS , VirtualAlloc , , ,
, 。 ,
<5>
:
, ( ) ,
, C , , 。 。
, , , , , 。
:
。 。
<6>
1 char s1[] = "aaaaaaaaaaaaaaa";
2 char *s2 = "bbbbbbbbbbbbbbbbb";
3 //aaaaaaaaaaa ;
4 // bbbbbbbbbbb ;
, , ( ) 。