
Berkus
19.07.2017
17:53:28
#holywar

Group Butler [beta]
19.07.2017
17:53:28
#holywar
С таким заявлением вам лучше сюда:
pro.cxx.holywars

Berkus
19.07.2017
17:53:34
идите в холиварную

Alexey
19.07.2017
17:55:12
а есть какой-нибудь блог с описанием изменений?

Google

Berkus
19.07.2017
17:55:37
джетбрейнс всегда публикует чейнджлоги

Evgeniy
19.07.2017
17:55:39

Alexander
19.07.2017
18:07:25
https://cmake.org/cmake/help/v3.9/release/3.9.html

Azoyan
19.07.2017
20:01:20
Парни, статическую память можно засрать?
В смысле компилятор под статическую память без ограничений выделяет?

Александр
19.07.2017
20:21:49
Если я не ошибаюсь, то статическая(автоматическая) память такая же динамическая, только выделаяется при вхождении область видимости для всего, что есть внутри последней, а освобождается после
Происходит это автоматически, а не ручками программиста, как с динамической

Azoyan
19.07.2017
20:28:34
разве компилятор заранее не выделяет под статические переменные память?

Matwey
19.07.2017
20:29:23
Ты имеешь ввиду секцию .data?
Или они не там лежат?

Azoyan
19.07.2017
20:33:45
https://godbolt.org/g/6WvnkW

Pavel
19.07.2017
20:39:32

cyberzx
19.07.2017
20:39:42

Google

cyberzx
19.07.2017
20:40:00

Azoyan
19.07.2017
20:40:26
я про переменные объявленные static

Александр
19.07.2017
20:40:42
Да, про стек, я и не говорил, что его нельзя переполнить)
Я к этому и вёл

Matwey
19.07.2017
20:42:44
https://stackoverflow.com/questions/12126103/maximum-size-of-bss-and-data

cyberzx
19.07.2017
20:46:15

Azoyan
19.07.2017
20:47:26
короче, миллион строк в статик не получится засунуть

Matwey
19.07.2017
20:47:52
Почему не получится? Я вот давеча целый zip-файл туда положил;

cyberzx
19.07.2017
20:47:56
это сколько в мегабайтах?

Azoyan
19.07.2017
20:48:27
ну словарь орфографический

Berkus
19.07.2017
20:49:02
но если там несколько сотен мегабайт, то без проблем

cyberzx
19.07.2017
20:50:20
правда запускаться будет долго и компилятор может немного опухнуть

Azoyan
19.07.2017
20:50:30
Ок, а потом затраты на доступ по индексам такие же дешёвые как на стеке?

Berkus
19.07.2017
20:51:25
ну да, это доступ к обычной памяти - cache locality может пострадать если там много

Azoyan
19.07.2017
20:51:55
но если друг за другом проходить локальность кеша будет хорошей?

Berkus
19.07.2017
20:53:04
не особо, в кэщ это все не влезет, надо будет делать префетч
ты помоему в X-y проблему уперся
что сделать то хочешь?

Google

Azoyan
19.07.2017
20:53:44
я упарываюсь просто ) хотел засрать статик
а что за Х-у проблема?

Berkus
19.07.2017
20:54:19
#xyproblem
алоэ ботэ

Azoyan
19.07.2017
20:54:29
икс игрик?

Berkus
19.07.2017
20:54:36
в супапро было ща

Azoyan
19.07.2017
20:55:27
ладно, я не понимаю. Ещё вопрос вот у нас есть struct W { const char* c = "abc"; };

Berkus
19.07.2017
20:55:35
http://mywiki.wooledge.org/XyProblem

Azoyan
19.07.2017
20:55:40
abc лежат в статической памяти, правильно?

cyberzx
19.07.2017
20:55:54
да

Berkus
19.07.2017
20:55:58
abc это сишная строка, так что да

Azoyan
19.07.2017
20:56:12
далее мы пишем static W a, b, c, d, e, ...

Azoyan
19.07.2017
20:56:22
Они тоже в статической памяти

Berkus
19.07.2017
20:56:50
но ссылаются на одну и ту же строку обычно, т.к. она константная

Azoyan
19.07.2017
20:56:52
структуры в статической памяти, поле структуры в статической памяти
ок
убираем const =))
struct W { char* c = "abc"; };

Berkus
19.07.2017
20:57:47
получаем варнинг, ставим его обратно

cyberzx
19.07.2017
20:57:51
в С++ так нельзя

Google

cyberzx
19.07.2017
20:57:54
в С можно

Azoyan
19.07.2017
20:58:20
ок, давайте тогда думать, что мы в Си

Berkus
19.07.2017
20:58:26
ты это можешь ведь локально на компилере проверить, у тебя всяко он есть

cyberzx
19.07.2017
20:58:35
Компилятор вполне может положить эти данные в какую-нибудь .ro секцию

Azoyan
19.07.2017
20:58:45
я ассемблерный код не умею читать :(
https://godbolt.org/g/C38mki

Berkus
19.07.2017
20:59:24
warning: conversion from string literal to 'char *' is deprecated [-Wc++11-compat-deprecated-writable-strings]

Admin
ERROR: S client not available

Berkus
19.07.2017
20:59:28
ну варнинг то понятный

cyberzx
19.07.2017
20:59:38
а чем тебя не устаривает?
struct W { char c[] = "abc"; }

Azoyan
19.07.2017
21:00:29
пока нормально тоже, устраивает

Berkus
19.07.2017
21:00:38
movabs rax, .L.str
оно всё равно берет только одну строку, и пишет тебе варнинг

cyberzx
19.07.2017
21:01:34
в первом случае в структуре лежит указатель, а во втором - массив

Berkus
19.07.2017
21:01:43
тоже указатель
ты тип char[] знаешь? это char*

Azoyan
19.07.2017
21:02:35

Berkus
19.07.2017
21:03:54
угу и инициализация сразу в 4 раза менее эффективная по командам и на порядок по доступу к памяти
mov ax, word ptr [.L.str]
mov word ptr [rdi], ax
mov cl, byte ptr [.L.str+2]
mov byte ptr [rdi + 2], cl

Google

Berkus
19.07.2017
21:04:27
так себе

Azoyan
19.07.2017
21:04:28

cyberzx
19.07.2017
21:04:40
ты тип char[] знаешь? это char*
В смысле? Котлеты отдельно, мухи отдельно. T[] это массив
http://en.cppreference.com/w/cpp/language/array
Если размер опущен, то он берётся из инициализатора

Berkus
19.07.2017
21:05:09
именно

Azoyan
19.07.2017
21:05:20
стоп стоп пацаны, вы отходите от темы
http://cpp.sh/7c6te

cyberzx
19.07.2017
21:06:01

Azoyan
19.07.2017
21:06:02
у меня возникает вопрос. куда записалось "bca"?
точнее, как выглядит наша память

شمويل
19.07.2017
21:07:04
посоветуйте средства разработки под плюсы в мак ос

Azoyan
19.07.2017
21:08:17
Статическая память struct { указатель на статическую память "аа" }
далее берём, по указателю на статическую область на "аа", переписываем туда "bca"
где это всё? что происходит?

Dmitry
19.07.2017
21:09:45

Pavel
19.07.2017
21:10:16
ты ни чего не переписываешь, у тебя просто char* word ссылается на другой кусок памяти

Berkus
19.07.2017
21:10:17

شمويل
19.07.2017
21:10:44
спс