Professional Documents
Culture Documents
Computer Programming
Dr. Deepak B Phatak
Dr. Supratik Chakraborty
Department of Computer Science and Engineering
IIT Bombay
Session: Pointers and Dynamic Memory Part 1
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
Read a sequence of
characters ending with . and
store in a char array
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
MEMORY
IIT Bombay
STACK SEGMENT
DATA
SEGMENT
CODE SEGMENT
MAIN
int main()
{
int numStudents;
cin >> numStudents;
// Allocate an int array A
// of size numStudents
// Store quiz marks in A
return 0;
}
MEMORY
IIT Bombay
MAIN
int main()
Local variable of function
Memory requirement known at compile-time
{
STACK SEGMENT
int numStudents;
cin >> numStudents;
// Allocate an int array A
DATA
SEGMENT
// of size numStudents
// Store quiz marks in A
CODE SEGMENT
return 0;
}
MEMORY
IIT Bombay
10
MAIN
MEMORY
IIT Bombay
11
MAIN
MEMORY
12
MAIN
MEMORY
IIT Bombay
13
MAIN
int main()
Where should this memory space come from?
{
STACK SEGMENT
int numStudents;
cin >> numStudents;
// Allocate an int array A
DATA
SEGMENT
// of size numStudents
// Store quiz marks in A
CODE SEGMENT
return 0;
}
MEMORY
IIT Bombay
14
MAIN
int main()
Where should this memory space come from?
{
STACK SEGMENT
int numStudents;
cin >> numStudents;
// Allocate an int array A
DATA
SEGMENT
// of size numStudents
// Store quiz
in A
CODE SEGMENT
Datamarks
Segment
return(also
0; called heap)
}
to our rescue !
MEMORY
IIT Bombay
15
MAIN
MEMORY
IIT Bombay
16
17
18
19
STACK SEGMENT
MAIN
int main()
{
int numStudents;
int * A;
cin >> numStudents;
A = new int[numStudents];
// Store quiz marks in A
return 0;
}
MEMORY
IIT Bombay
20
STACK SEGMENT
MAIN
int main()
{
int numStudents;
int * A;
cin >> numStudents;
A = new int[numStudents];
// Store quiz marks in A
return 0;
}
MEMORY
IIT Bombay
21
STACK SEGMENT
MAIN
int main()
{
int numStudents;
int * A;
cin >> numStudents;
A = new int[numStudents];
// Store quiz marks in A
return 0;
}
MEMORY
IIT Bombay
22
0x024
STACK SEGMENT
MAIN
int main()
{
int numStudents;
int * A;
Address
cin >> numStudents; 0x024
A = new int[numStudents];
// Store quiz marks in A
return 0;
}
MEMORY
IIT Bombay
23
0x024
STACK SEGMENT
2
10
15
DATA SEGMENT (HEAP)
CODE SEGMENT
MAIN
int main()
{
int numStudents;
int * A;
Address
cin >> numStudents; 0x024
A = new int[numStudents];
A[0] = 10; A[1] = 15;
return 0;
}
MEMORY
IIT Bombay
24
MAIN
int main()
0x024
{
STACK SEGMENT
int numStudents;
2
int * A;
Address
10
cin >> numStudents; 0x024
15
A = new int[numStudents];
DATA SEGMENT (HEAP)
A[0] = 10; A[1] = 15;
CODE SEGMENT
return 0;
} How are addresses of A[0] and A[1] calculated?
MEMORY
IIT Bombay
25
Compiler knows
Therefore,
Address of A[0] is (A + 0)
Address of A[i] is (A + (4*i))
Address Arithmetic
26
27
28
29
int main()
{
Note the check for new
int numStudents;
having succeeded
int * A;
cin >> numStudents;
A = new int[numStudents];
if (A != NULL) { A[0] = 10; A[1] = 15;}
return 0;
}
Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay
30
Summary
IIT Bombay
31