Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
#1

Аллокатор в chrome - C++

19.11.2013, 03:45. Просмотров 499. Ответов 5
Метки нет (Все метки)

Всем привет, начал изучать исходники хрома, в аллокаторе, метод realloc должен возвращать nullptr если передаваемый аргумент size равен нулю:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void* realloc(void* ptr, size_t size) __THROW {
  // Webkit is brittle for allocators that return NULL for malloc(0).  The
  // realloc(0, 0) code path does not guarantee a non-NULL return, so be sure
  // to call malloc for this case.
  if (!ptr)
    return malloc(size);
 
  void* new_ptr;
  for (;;) {
#ifdef ENABLE_DYNAMIC_ALLOCATOR_SWITCHING
    switch (allocator) {
      case JEMALLOC:
        new_ptr = je_realloc(ptr, size);
        break;
      case WINHEAP:
      case WINLFH:
        new_ptr = win_heap_realloc(ptr, size);
        break;
      case TCMALLOC:
      default:
        new_ptr = do_realloc(ptr, size);
        break;
    }
#else
    // TCMalloc case.
    new_ptr = do_realloc(ptr, size);
#endif
 
    // Subtle warning:  NULL return does not alwas indicate out-of-memory.  If
    // the requested new size is zero, realloc should free the ptr and return
    // NULL.
    if (new_ptr || !size)
      return new_ptr;
    if (!new_mode || !call_new_handler(true))
      break;
  }
  return new_ptr;
}
При этом в юнит-тестах написано что должно быть наоборот:

C++
1
2
3
4
5
6
7
8
9
10
11
TEST(Allocators, ReallocZero) {
  // Test that realloc to zero does not return NULL.
  for (int size = 0; size >= 0; size = NextSize(size)) {
    char* ptr = reinterpret_cast<char*>(malloc(size));
    EXPECT_NE(static_cast<char*>(NULL), ptr);
    ptr = reinterpret_cast<char*>(realloc(ptr, 0));
    EXPECT_NE(static_cast<char*>(NULL), ptr); // <--- вот
    if (ptr)
      free(ptr);
  }
}
При этом юнит-тестирование на серверах гугла проходится. В чём собственно загвоздка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 03:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аллокатор в chrome (C++):

Пишем аллокатор - C++
дабы не захламлять и так уже захламленную тему про перегрузку операторов создаю новую тему, собственно по поводу аллокаторов прям...

Быстрый аллокатор - C++
Собственно, необходим аллокатор для быстрого выделения памяти под мелкие объекты, совместимый со стандартными контейнерами (std::list и...

Задача с собеседования (аллокатор памяти) - C++
Вопрос звучит так: &quot;Напишите быстрый аллокатор памяти&quot; Как я его понимаю: можно пожертвовать растратой памяти, всякими наворотами,...

Как написать пуловый аллокатор для работы с объектами - C++
Здравствуйте! Подскажите как написать пуловый аллокатор для работы с объектами

Пародия на стековый аллокатор - C++
здравствуйте, решил тут чуток поиграться... сделать аллокатор чтобы данные в статическом буфере размещал. в итоге долго поиграться не...

Аллокатор памяти общего назначения - C++
Добрый день! В ВУЗе задали написать аллокатор памяти общего назначения на С++, но у меня нет ни единого представления как это можно...

5
Tulosba
19.11.2013, 13:04
  #2

Не по теме:

Цитата Сообщение от kvadro Посмотреть сообщение
В чём собственно загвоздка?
Наверное просто гугл не хочет платить Вам $$$ за найденную ошибку

0
stima
482 / 334 / 38
Регистрация: 22.03.2011
Сообщений: 1,076
Завершенные тесты: 2
19.11.2013, 13:27 #3
Цитата Сообщение от kvadro Посмотреть сообщение
Всем привет, начал изучать исходники хрома, в аллокаторе, метод realloc должен возвращать nullptr если передаваемый аргумент size равен нулю:
Это где написанно.
0
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.11.2013, 13:39  [ТС] #4
Это где написанно.
// Subtle warning: NULL return does not alwas indicate out-of-memory. If
// the requested new size is zero, realloc should free the ptr and return
// NULL
Собственно стандартный realloc так и поступин, но например je_realloc - нет.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.11.2013, 14:15 #5
Цитата Сообщение от kvadro Посмотреть сообщение
Собственно стандартный realloc так и поступин
Отсюда http://www.cplusplus.com/reference/cstdlib/realloc/ :
Для С++98:
A null-pointer indicates either that size was zero (an thus ptr was deallocated), or that the function did not allocate storage (and thus the block pointed by ptr was not modified).
Для С++11:
A null-pointer indicates that the function failed to allocate storage, and thus the block pointed by ptr was not modified.
Как видим, во втором варианте size не упоминается вовсе.
Цитата Сообщение от kvadro Посмотреть сообщение
но например je_realloc - нет.
А где сказано как он должен себя вести?
0
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.11.2013, 17:13  [ТС] #6
А где сказано как он должен себя вести?
Какая разница где, у них своя обёртка над realloc. Стандартная реализация realloc вернёт указатель, реализация je_realloc вернёт nullptr. Я конечно могу предположить что jemalloc реализовали для галочки и его никто не тестил ( ибо основной менеджер памяти считается tcmalloc ), но с тестированием operator new тоже траблы. Так что я думаю что юнит-тесты аллокатора не производятся вообще.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 17:13
Привет! Вот еще темы с ответами:

Автоматизация Google Chrome - C++
Не подскажите библиотеку для автоматизации браузера Google Chrome под Visual C/C++?Желательно хорошую,дабы она умела кликать по полям и...

Копирование и просмотр истории браузера chrome - C++
Задача - копировать историю просмотра Веб страниц и просматривать ее из собственного приложения. Откуда и что копировать - уже нашел, а...

Получить код страницы из Google Chrome||Opera - C++
Нужно сохранить html код страницы из вкладки браузера в .тхт (браузер может быть свернут). Какими способами это можно сделать?

Получить html код открытой в Google Chrome страницы - C++
Как достать html код сейчас открытой страницы из хрома?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
19.11.2013, 17:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru