联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2022-05-05 12:07

COMS W4115 Programming Languages and Translators

Homework Assignment 3

Submit this assignment online via Courseworks as a PDF file. Fill in or annotate this PDF or print it out, write on it, and scan it.

Please keep your answers in the boxes.

Do this assignment alone. You may consult the instructor and the TAs, but not other students.

Name: Uni:

1. (20 pts.) For the following C array on a processor with the usual alignment rules,

i n t a [ 2 ] [ 3 ] ;

(a) Show the order in which its elements are arranged in memory.

(b) Write an expression for the byte address of a[i][j] in terms of a (the address of the start of the array), i , and j .

(c) Verify parts a) and b) by writing a small C program that tests your hypothesis. Examine the assembly language output with

the C compiler’s -S flag (e.g., gcc -O -S array.c). Such a program should be simple and contain and access such an array,

but not be so simple that the compiler optimizes most of it away. On the next page, include in an annotated assembly

listing that explains how it verifies your hypothesis. Make sure the assembly listing is no more than about 40 lines, either

by simplifying your program or trimming the output.

C program:

1

Assembly listing:

2. (20 pts.) For a 32-bit little-endian processor with the usual alignment rules, show the memory layout and size in bytes of the

following three C variables.

union {

s t r u c t {

char a ; /* 8 - b i t */

i n t b ; /* 32 - b i t */

shor t c ; /* 16 - b i t */

} s ;

s t r u c t {

i n t d ; /* 32 - b i t */

shor t e ; /* 16 - b i t */

} t ;

} u1 ;

Layout:

Size in bytes:

s t r u c t {

char a ;

i n t b ;

shor t c ;

shor t d ;

} s1 ;

Layout:

Size in bytes:

s t r u c t {

shor t a ;

char b ;

shor t c ;

char d ;

shor t e ;

} s2 ;

Layout:

Size in bytes:

3. (20 pts.) Draw the layout of the stack just before bar is called in foo. Indicate storage for function arguments, local variables,

return addresses, and stored frame pointers. Indicate where the stack and frame pointers point.

void bar ( i n t x , i n t y , i n t z ) ;

void foo ( i n t a , i n t b) {

i n t d , e ;

bar (2 , 5 , 7 ) ;

}

4. (20 pts.) Draw the layouts of s1 and s2 and the virtual tables for the Ellipse and Square classes.

pub l i c c l a s s Shape {

double x , y ;

pub l i c double area ( ) { . . . }

}

c l a s s E l l i p s e extends Shape {

p r i va t e double height , width ;

pub l i c double area ( ) { . . . }

}

c l a s s Square extends Shape {

p r i va t e double width ;

pub l i c double area ( ) { . . . }

}

pub l i c c l a s s Main {

pub l i c s t a t i c void main ( ) {

Shape s1 = new Square (10 , 3 , 1 4 ) ;

Shape s2 = new E l l i p s e (3 , 8 , 2 , 6 ) ;

System . out . p r i n t l n ( s1 . area ( ) ) ;

}

}

Square Virtual Table:

s1 object:

Ellipse Virtual Table:

s2 object:

5. (20 pts.) For the program below written in a C-like language with nested function definitions,

void main ( ) {

i n t x = 5 ;

void bar ( ) {

x = x + 2 ;

}

void foo ( ) {

i n t x = 8 ;

bar ( ) ;

p r i n t f ( "%d\n" , x ) ;

}

foo ( ) ; /* Body o f main ( ) */

}

What would it print if the language used static scoping?

What would it print if the language used dynamic scoping?


相关文章

版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp