Я использую интерфейс C для служб XPC; кстати, мой XPC-сервис работает очень красиво, из-за следующей проблемы.Сбой службы массива XPC
На днях я попытался отправить «большой» массив через XPC; порядка 200 000 записей. Обычно мое приложение обрабатывает данные порядка нескольких тысяч записей и не имеет никаких проблем с этим. Для других целей массив такого размера может не быть особенным.
Вот мой код сервера C++ для создания массива:
xpc_connection_t remote = xpc_dictionary_get_remote_connection(event);
xpc_object_t reply = xpc_dictionary_create_reply(event);
xpc_object_t times;
times = xpc_array_create(NULL, 0);
for(unsigned int s = 0; s < data.size(); s++)
{
xpc_object_t index = xpc_uint64_create(data[s]);
xpc_array_append_value(times, index);
}
xpc_dictionary_set_value(reply, "times", times);
xpc_connection_send_message(remote, reply);
xpc_release(times);
xpc_release(reply);
и здесь код клиента:
xpc_object_t times = xpc_dictionary_get_value(reply, "times");
size_t count = xpc_array_get_count(times);
for(int c = 0; c < count; c++)
{
long my_time = xpc_array_get_uint64(times, c);
local_times.push_back(my_time);
}
Если я пытаюсь обрабатывать большой массив, я получаю ошибку сегм (SIGSEGV)
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libxpc.dylib 0x00007fff90e5cc02 xpc_array_get_count + 0
Перекармливания является общей проблемой во время Рождества –
Итак, каков размер каждой записи? Вы видите это только в том случае, когда количество записей велико, как 2lakh? Похоже на переполнение стека – Gopi