Я выделяю массив и освобождаю его при каждом обратном вызове аудиопотока.Основной пользовательский поток (веб-браузер) постоянно выделяет и освобождает память на основе пользовательского ввода.Я отправляю неопубликованный массив float на звуковую карту.(пример на моей странице в моем профиле.) Идея состоит в том, чтобы услышать изменения состояния программы.
Когда я вызываю malloc(sizeof(float)*256*13)
и меньше, я получаю массив, заполненный широким диапазоном чисел с плавающей точкой, которые имеют, казалось бы, случайное распределение,Неправильно называть это случайным - возможно, это происходит из-за того, что ранее было в блоке памяти.Это поведение, которое я ожидал и хочу использовать.Однако, когда я делаю malloc(sizeof(float)*256*14)
и больше, я получаю массив, заполненный только нулями.Я хотел бы знать, почему существует этот утес и есть ли что-то, что я могу сделать, чтобы обойти это.Я знаю, что по стандарту это неопределенное поведение, но я надеюсь, что у кого-то, кто знает реализацию malloc в какой-либо системе, может быть объяснение.
Означает ли это, что malloc также устанавливает mem в ноль для больших размеров??Это было бы удивительно, так как это было бы неэффективно.Даже если будет обнулено больше фрагментов памяти, я ожидаю, что что-то случится иногда, так как массивы постоянно меняются.
Если возможно, я бы хотел получить фрагменты памяти, которые перераспределяются по недавно освобожденной памятипоэтому любые альтернативы будут приветствоваться.
Я думаю, это странный вопрос для некоторых, потому что моя цель - исследовать неопределенное поведение и сознательно использовать плохие методы программирования, но это приложение, которое мне интересно создавать, поэтому, пожалуйста, имейте в виду использование неинициализированных массивов.,Я знаю, что поведение такого использования не определено, поэтому, пожалуйста, потерпите меня и не говорите мне не делать этого.Я разрабатываю на Mac 10.5.