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

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

Войти
Регистрация
Восстановить пароль
 
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.11.2013, 03:45     Аллокатор в chrome #1
Всем привет, начал изучать исходники хрома, в аллокаторе, метод 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);
  }
}
При этом юнит-тестирование на серверах гугла проходится. В чём собственно загвоздка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 03:45     Аллокатор в chrome
Посмотрите здесь:

Баг в Google Chrome при ajax-запросе, Скрипт работает во всех браузерах кроме Google Chrome PHP
Задача с собеседования (аллокатор памяти) C++
Получить html код открытой в Google Chrome страницы C++
Автоматизация Google Chrome C++
Копирование и просмотр истории браузера chrome C++
C++ Пишем аллокатор
Аллокатор памяти общего назначения C++
Как написать пуловый аллокатор для работы с объектами C++
C++ Быстрый аллокатор
Chrome поиск по умолчанию не меняется (Вирус > Chrome Search)
Chrome redirect на mail.ru + баннеры в Chrome и Mozilla
C++ Получить код страницы из Google Chrome||Opera

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
19.11.2013, 13:04
  #2

Не по теме:

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

stima
431 / 286 / 16
Регистрация: 22.03.2011
Сообщений: 932
Завершенные тесты: 1
19.11.2013, 13:27     Аллокатор в chrome #3
Цитата Сообщение от kvadro Посмотреть сообщение
Всем привет, начал изучать исходники хрома, в аллокаторе, метод realloc должен возвращать nullptr если передаваемый аргумент size равен нулю:
Это где написанно.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.11.2013, 13:39  [ТС]     Аллокатор в chrome #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 - нет.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.11.2013, 14:15     Аллокатор в chrome #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 - нет.
А где сказано как он должен себя вести?
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
19.11.2013, 17:13  [ТС]     Аллокатор в chrome #6
А где сказано как он должен себя вести?
Какая разница где, у них своя обёртка над realloc. Стандартная реализация realloc вернёт указатель, реализация je_realloc вернёт nullptr. Я конечно могу предположить что jemalloc реализовали для галочки и его никто не тестил ( ибо основной менеджер памяти считается tcmalloc ), но с тестированием operator new тоже траблы. Так что я думаю что юнит-тесты аллокатора не производятся вообще.
Yandex
Объявления
19.11.2013, 17:13     Аллокатор в chrome
Ответ Создать тему
Опции темы

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