Consider the following C declaration and assume that the machine has 1-byte characters, 2-byte short, 4-byte integers, 4-byte single-precision floating point numbers, 4-byte pointers, 8-byte double- precision floating-point numbers, and the compiler does not reorder fields and leaves no memory gaps. You may consider all other data types as 8-byte. union UI ( int value; char code; double data; void pointer; }; union U2 ( float func; short small [2]; }; union U3 ( B; char text; long long number; }; union U4 ( char name [6]; unsigned int id; }; struct S ( int index; union Ui item; union U4 person; void next;

C++ Programming: From Problem Analysis to Program Design
8th Edition
ISBN:9781337102087
Author:D. S. Malik
Publisher:D. S. Malik
Chapter12: Points, Classes, Virtual Functions And Abstract Classes
Section: Chapter Questions
Problem 1TF
icon
Related questions
Topic Video
Question
100%
Consider the following C declaration and assume that the machine has 1-byte characters, 2-byte
short, 4-byte integers, 4-byte single-precision floating point numbers, 4-byte pointers, 8-byte double-
precision floating-point numbers, and the compiler does not reorder fields and leaves no memory
gaps. You may consider all other data types as 8-byte.
union U1 (
int value;
char code;
double data;
void pointer;
};
union U2 (
float func;
short small [2];
};
union U3 (
};
char text;
long long number;
};
union U4 (
char name [6];
unsigned int id;
};
struct S (
int index;
union U1 item;
union U4 person;
void next;
Answer the following questions:
1. How many bytes does each union declared in the code and struct s occupy?
2. If the memory address of S starts from 3000, what are the start addresses of S. item.pointer
and S. person.name [2]?
3. If the compiler uses a simple memory alignment mechanism that aligns variables to 8-byte
boundaries, what will be the size of S?
Transcribed Image Text:Consider the following C declaration and assume that the machine has 1-byte characters, 2-byte short, 4-byte integers, 4-byte single-precision floating point numbers, 4-byte pointers, 8-byte double- precision floating-point numbers, and the compiler does not reorder fields and leaves no memory gaps. You may consider all other data types as 8-byte. union U1 ( int value; char code; double data; void pointer; }; union U2 ( float func; short small [2]; }; union U3 ( }; char text; long long number; }; union U4 ( char name [6]; unsigned int id; }; struct S ( int index; union U1 item; union U4 person; void next; Answer the following questions: 1. How many bytes does each union declared in the code and struct s occupy? 2. If the memory address of S starts from 3000, what are the start addresses of S. item.pointer and S. person.name [2]? 3. If the compiler uses a simple memory alignment mechanism that aligns variables to 8-byte boundaries, what will be the size of S?
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 4 steps

Blurred answer
Knowledge Booster
Instruction Format
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
C++ Programming: From Problem Analysis to Program…
C++ Programming: From Problem Analysis to Program…
Computer Science
ISBN:
9781337102087
Author:
D. S. Malik
Publisher:
Cengage Learning
C++ for Engineers and Scientists
C++ for Engineers and Scientists
Computer Science
ISBN:
9781133187844
Author:
Bronson, Gary J.
Publisher:
Course Technology Ptr