2. MSG_WAITALL не гарантирует получение полного объёма запрошенных данных. Обязательно проверяйте размер, который возвращает recv
3. Порядок байт -- будет тот же, что и на отправляющей стороне.
4. Данные принимаются: для потоковых сокетов (например TCP) из установленного соединения, для датаграммных сокетов -- в зависимости от того, был ли вызван connect, либо от любого отправителя, либо только от адреса/порта на который был выполнен connect. recvfrom не изменит множества сокетов, от которых можно получить сообщение, но вернёт для каждого полученного сообщения адрес его отправителя.
@EvilMan Если ещё подумать, то обычный алгоритм существенно опирается на упорядоченность размеров в исходном состоянии. Но, да -- решение получается похожим.
> Просто вы написали { const size_t _size; const int* const _ptr; }
Я не это написал. Я написал { const size_t _size; int* const _ptr; }. Указатель нельзя изменить, но значения на которые он указывает -- можно.
const применённый к агрегатному типу делает все не помеченные mutable поля const. Типы const {int i;} и {const int i;} разные, совпадают они лишь "по смыслу".
wait без параметров ожидает заверщения всех дочерних процессов. в качестве параметра wait может принимать идентификаторы процессов, но никак не временной интервал.
// reset the node maps
for(y=0;yupdatePriority(xFinish, yFinish);
pq[pqi].push(*n0);
/****** и эта запись -- мимо массива *******/
open_nodes_map[x][y]=n0->getPriority(); // mark it on the open nodes map
Последнее предложение непонятно. И совсем непонятно при чём тут gdb.
Если вы хотите в рантайме узнать, поддерживается ли фича процессором, используйте соответствующие механизмы: cpuid для x86, идентификатор архитектуры для ARM, ...
cap:
.LFB0:
movl %edi, %eax # взял n
subl %esi, %eax # вычел из него n_max
sarl $31, %eax # сдвинул арифметически результат
andl %edi, %eax # побитово умножил
ret
Это довольно просто. Добавить в команды компиляции/линковки ключ -g.
Выбрать gdb for target. Запустить gdb --args application parameters. Набрать run. Приложение запустится, получит сигнал и вывалится в gdb. Напечатать регистры/трассу вызовов: info registers / bt. По этим данным смотреть, где упало.
Не уверен, что рекурсия здесь поможет. Но -- да, чтобы узнать S1 нужно сначала узнать минимальный S2 для фиксированной первой цифры, либо найти пропущенную вторую цифру (и тогда S2 равен 0). Я сегодня-завтра постараюсь накидать код решения, потому что словами как-то сложно объяснить.
Потому что это динамическое программирование: чтобы найти оптимальное решение задачи, нужно найти оптимальное решение её подзадачи (а размер задачи уменьшается с ростом длины совпадения).