Небольшой запрос фичи: потестируйте разные варианты — забивать до MTU и посылать не больше N<<30 координат. Результаты будут весьма полезны, ибо писать ПО надо хорошо, а не как сейчас (твиттер пост с фото сейчас отправляет только в идеальных условиях).
Меня смущает лишь то, что пакет размером 50 октетов передастся с заметно большей вероятностью, чем в 500, особенно в плохих условиях. А значит с каждым разом передать будет сложнее и сложнее. // Я сам слабо знаком с gprs, быть может он сам разбивает на маленькие пакетики и каждый перепосылает при ошибке, но если судить по реальным приложениям, то передать мегабайт заметно сложнее (а не просто дольше), чем 10кб.
Я бы сделал наоборот — о плохих сервер молчит, о хороших докладывает. Если клиент не дождался подтверждения за 30(+-) секунд, то перепосылает, дождался — очищает буфер. Новая координата появляется каждую секунду, занимает не больше 16 октетов.
Учитывая скорость перемещения, шум, низкую частоту обновления данных gps, её более частое пропадание (по сравнению с gprs), трек должен получиться дырявый — интерполировать надо в любом случае. Складировать данные требуется лишь в случае обновления gps, но недоступности gprs. Протокол менять надо лишь в случае откровенно плохого качества gprs.
Сдвиг без потери данных, но долго (надо скопировать 176гб).
Изменение размера сектора — по идее может пройти без потери, если потом ручками перебить скорректированные начала-размеры разделов. Но это всё в теории. В теории 32 бита на начало раздела, 32 бита на размер, но ведётся ли в используемых ОС счёт секторов в 64-битной переменной, я не знаю. В теории в MBR указываются сектора, а 512 байт в явном виде нет, но что на практике — я не знаю, я слышал только об использовании GPT на больших дисках.
Если это ситуация, когда 99% попадает на 1 из вариантов, а всё остальное распределено между 5 другими, то да, соглашусь. Но это уже слишком тонкая оптимизация.
Значит компилятор подумал, что так эффективнее. Ведь там ещё надо предусмотреть проверку на соответствие границам (а это 2 вычитания и 2 прыжка) (да-да, она может быть необязательной, о чём знает только программист). Попробуйте сделать то же самое, но с 30 case'ами. И флаг -O2. Должно свернуться в нечто, эквивалентное коду в вопросе.