Re: тестовые вопросы
От: Abyx Россия  
Дата: 20.06.12 08:19
Оценка: 2 (1)
Здравствуйте, Alexander Pazdnikov, Вы писали:

AP>Здравствуйте, Коллеги.


AP>Прошу поправить мои ответы на несколько тестовых вопросов.


AP>Спасибо.




AP>.Q

AP>1. Является ли язык C строгим подмножеством языка C++?

AP>.A

AP>По-моему, нет.
AP>По крайней мере, усиленный контроль типов в C++ требует от большинства программ на С доработки.

действующие стандарты С11 и С++11 имеют различные синтаксические конструкции.
могу ошибаться, но уже как минимум начиная с С99/С++98 С не является подмножеством С++

AP>.Q

AP>4. Каков размер следующей структуры? Почему?

AP> struct S

AP> {
AP> int i;
AP> void *v;
AP> char c;
AP> long l;
AP> };

AP>.A

AP>зависит от разрядности процессора и от принятого выравнивания адресов.

AP>ARM — (sizeof(int) = 4, sizeof(void *) = 4, alignment = 4) — 16 байт

AP>x86 (sizeof(int) = 4, sizeof(void *) = 4, alignment = 4) — 16 байт
AP>x86_64 (sizeof(int) = 4, sizeof(void *) = 8, alignment = 4) — 20 байт
AP>ia64 (sizeof(int) = 8, sizeof(void *) = 8, alignment = 8) — 32 байт

sizeof(S), который не меньше суммы sizeof ее членов. выравнивание не указано, и компилятор может использовать любое выравнивание.
btw, в своем ответе Вы забыли про alignment=1


AP>.Q

AP>8. Предположим, есть реализация dequeue в виде двусвязного списка (то
AP> есть есть указатели на предыдущий и следующий элементы). А
AP> возможна ли реализация, где для связи узлов используется только
AP> одно слово вместо двух (то есть мы хотим сэкономить одно слово
AP> размера sizeof(struct node *))?
AP>.A
AP>Полагаю, речь идёт о циклическом буфере или контейнере где есть указатель на начало и указатель на конец, элементы включают указатель только на следующий элемент. Проход односторонний, с конца в начало.

тогда это не double-ended queue, раз мы не можем удалять элементы с конца за О(1)

AP>.Q

AP>9. Предположим, что в многопоточной программе в одном потоке
AP> выполняется код

AP> a = 3;

AP> b = 1;

AP> а в другом потоке


AP> if (b == 1)

AP> sum += a;

AP> (оба потока видят одни и те же а и b, блокировок нет). Если

AP> условие выполнится, то на сколько увеличится sum?

AP>.A

AP>либо на 3, либо на 6.

для начала надо определить исходные значения a и b.
поток #2 может выполниться до потока #1,
либо сначала выполнится b = 1; потом поток #2, потом a = 3;

откуда взялось 6 я не понял, может вы имели ввиду что код выполняется в цикле? так и надо писать %)
In Zen We Trust
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.