Answers/Solutions to Exercises in Chapter 9, Exercise 2
E2: Write access functions that can retrieve or store float value at any memory location without regards to memory alignment.
S2: A sample program is below. Notice that we really proved that it works regardless memory alignment: in main() we first store the float at address &buffer[11], and then repeated it at address &buffer[12]. It is not possible that both would be at the word boundary.
void store(float f,void* a)
{
float v = f;
char* from = (char*) &v;
char* to = (char*) a;
for(int i=0; i < sizeof(float); i++)
*to++=*from++;
}
float fetch(void* a)
{
float v;
char* from = (char*) a;
char* to = (char*) &v;
for(int i=0; i < sizeof(float); i++)
*to++=*from++;
return v;
}
int main()
{
char buffer[30];
float f = (float) 2.35;
store(f,(void*) &buffer[11]);
printf("%f\n",fetch((void*) &buffer[11]));
store(f,(void*) &buffer[12]);
printf("%f\n",fetch((void*) &buffer[12]));
return 0;
}
Back to Answers/Solutions Index Back to Answers/Solutions for Chapter 5 Index