Size: a a a

2020 October 15

DF

Dollar Føølish in pro.cxx
Получается даже для просмотра кода нужна интеграция иде с Базелем?
источник

DF

Dollar Føølish in pro.cxx
Ну например перейти к определению
источник

PS

Pavel Samolysov in pro.cxx
Ну не всякой ИДЕ, просто CLion строит модель кода у себя по CMake из коробки, ну и make недавно научились. А если хочешь использовать Bazel - ну тогда ставь плагин и мы будем строить модель кода по базелю. Так ИДЕ устроена, нет у них своих .project как у Eclipse
источник

PS

Pavel Samolysov in pro.cxx
Хотя у IntelliJ IDEA есть, вся интеграция с Maven/Gradle сводится к генерации .iml файлов (только она их еще и прятать умеет). Так точнее, поправил.
источник

DF

Dollar Føølish in pro.cxx
Понятно, спасибо
источник

PS

Pavel Samolysov in pro.cxx
Забавно, что BUILD файлы сторонних зависимостей CLion все же открывает, т.е. он их видит, а навигация по коду не работает, точнее не работала, когда последний раз пробовал. Плагин пишут в Гугл и сторонние PR принимают крайне неохотно (если вообще принимают).
источник

VK

Vyacheslav Klimentye... in pro.cxx
В стандарте говорится, что при использовании new[] памяти может выделиться больше, чем истинный размер. Причем этот overhead не определен.

new T[5]; // calls operator new[](sizeof(T)*5 + overhead)

На что идёт этот overhead? Вот тут есть хороший пример: https://stackoverflow.com/questions/4011577/placement-new-array-alignment
источник

SS

Sergey Sobolev in pro.cxx
Vyacheslav Klimentyev
В стандарте говорится, что при использовании new[] памяти может выделиться больше, чем истинный размер. Причем этот overhead не определен.

new T[5]; // calls operator new[](sizeof(T)*5 + overhead)

На что идёт этот overhead? Вот тут есть хороший пример: https://stackoverflow.com/questions/4011577/placement-new-array-alignment
Он ни на что не идет, это особенность выделения памяти ОС - она не будет искать конкретно запрошенные n байт, а, чтоб быстрее, выделит первый более менее подходящий кусок. Память фрагментируется же
источник

VK

Vyacheslav Klimentye... in pro.cxx
Sergey Sobolev
Он ни на что не идет, это особенность выделения памяти ОС - она не будет искать конкретно запрошенные n байт, а, чтоб быстрее, выделит первый более менее подходящий кусок. Память фрагментируется же
А почему тогда для new T такого нет? Там честный sizeof(T). T может быть довольно большим и сложным. С точки зрения запроса выделения фрагмента памяти все аналогично.
источник

D

Dmitriy in pro.cxx
Vyacheslav Klimentyev
В стандарте говорится, что при использовании new[] памяти может выделиться больше, чем истинный размер. Причем этот overhead не определен.

new T[5]; // calls operator new[](sizeof(T)*5 + overhead)

На что идёт этот overhead? Вот тут есть хороший пример: https://stackoverflow.com/questions/4011577/placement-new-array-alignment
Например, на сохранение числа выделенных элементов
источник

VK

Vyacheslav Klimentye... in pro.cxx
Dmitriy
Например, на сохранение числа выделенных элементов
Я об этом первым делом думал, но нет. Тогда была бы явная формула для расчета, а не говорилось бы, что не определено.
Кроме того, в примере на SO есть случаи, где overhead равен нулю.
источник

V

Vyacheslav in pro.cxx
Sergey Sobolev
Он ни на что не идет, это особенность выделения памяти ОС - она не будет искать конкретно запрошенные n байт, а, чтоб быстрее, выделит первый более менее подходящий кусок. Память фрагментируется же
Не путайте, пожалуйста, ОС и libc. OC выделяет память страницами, и там свои заморочки с адресацией, правами доступа, расшариванием между процессами, CoW и swap.
источник

AF

Aidar Fattakhov in pro.cxx
Vyacheslav Klimentyev
Я об этом первым делом думал, но нет. Тогда была бы явная формула для расчета, а не говорилось бы, что не определено.
Кроме того, в примере на SO есть случаи, где overhead равен нулю.
Зачем в стандарте описывать строго оверхед на имплементацию?
источник

VK

Vyacheslav Klimentye... in pro.cxx
Aidar Fattakhov
Зачем в стандарте описывать строго оверхед на имплементацию?
Мне больше интересует, зачем он нужен в имплементации. Что туда пишется или он используется для чего-то другого?
источник

AF

Aidar Fattakhov in pro.cxx
Вам же ответили
источник

D

Danya in pro.cxx
Vyacheslav Klimentyev
Мне больше интересует, зачем он нужен в имплементации. Что туда пишется или он используется для чего-то другого?
Ну тут надо открывать доки конкретной имплементации и смотреть
источник

VK

Vyacheslav Klimentye... in pro.cxx
Danya
Ну тут надо открывать доки конкретной имплементации и смотреть
Это да. Осталось бы найти их у Texas Instruments ;)
источник

..

.D.U.Ż.Y. .D.Y.M. in pro.cxx
Привет всем.
Возникла проблема. В библиотеке libpqxx при получении значений из дб, например
SELECT SESSIONID as SessionID USERLOGIN as UserLogin  FROM CORE_USER_SESSION
при получении значений по типу имя столбца, значение столбца метод field.name убивает регистр, хотя в sql я написал ``` as
SessionID
```
и на выходе получается ключ json с убитым регистром. Кто - нибудь сталкивался? Знает как поправить? Буду признателен за помощь
Сам код получения значений:
  std::for_each(res.begin(), res.end(), [=](pqxx::tuple const & row)
     {
       std::for_each(row.begin(), row.end(), [=](pqxx::field const & field)
       {
         rapidjson::Value key(field.name(), result.get()->GetAllocator()),
                       value(field.c_str(), result.get()->GetAllocator());

         result.get()->AddMember(key, value, result.get()->GetAllocator() );
       });
     });
источник

IZ

Ilia Zviagin in pro.cxx
.D.U.Ż.Y. .D.Y.M.
Привет всем.
Возникла проблема. В библиотеке libpqxx при получении значений из дб, например
SELECT SESSIONID as SessionID USERLOGIN as UserLogin  FROM CORE_USER_SESSION
при получении значений по типу имя столбца, значение столбца метод field.name убивает регистр, хотя в sql я написал ``` as
SessionID
```
и на выходе получается ключ json с убитым регистром. Кто - нибудь сталкивался? Знает как поправить? Буду признателен за помощь
Сам код получения значений:
  std::for_each(res.begin(), res.end(), [=](pqxx::tuple const & row)
     {
       std::for_each(row.begin(), row.end(), [=](pqxx::field const & field)
       {
         rapidjson::Value key(field.name(), result.get()->GetAllocator()),
                       value(field.c_str(), result.get()->GetAllocator());

         result.get()->AddMember(key, value, result.get()->GetAllocator() );
       });
     });
Да , это ошибка в твоей программе.

Где -- ищи отладчиком.

Да, зачем в лямбду захват по копированию?
источник

АК

Александр Караев... in pro.cxx
.D.U.Ż.Y. .D.Y.M.
Привет всем.
Возникла проблема. В библиотеке libpqxx при получении значений из дб, например
SELECT SESSIONID as SessionID USERLOGIN as UserLogin  FROM CORE_USER_SESSION
при получении значений по типу имя столбца, значение столбца метод field.name убивает регистр, хотя в sql я написал ``` as
SessionID
```
и на выходе получается ключ json с убитым регистром. Кто - нибудь сталкивался? Знает как поправить? Буду признателен за помощь
Сам код получения значений:
  std::for_each(res.begin(), res.end(), [=](pqxx::tuple const & row)
     {
       std::for_each(row.begin(), row.end(), [=](pqxx::field const & field)
       {
         rapidjson::Value key(field.name(), result.get()->GetAllocator()),
                       value(field.c_str(), result.get()->GetAllocator());

         result.get()->AddMember(key, value, result.get()->GetAllocator() );
       });
     });
и зачем for_each?
источник