Size: a a a

2020 April 27

in pro.cxx
Как это так - нет? )
источник

DS

Dmitriy Salko in pro.cxx
Привет. А как realloc-нуть стек прямо в рантайме?
Скопировать куда надо а потом записать новый адрес в SP
источник

in pro.cxx
Dmitriy Salko
Скопировать куда надо а потом записать новый адрес в SP
Да это ясно, а есть ли способ как-то правильно определить, в какую вообще сторону растёт стек, чтобы его соответственно при реаллоке расположить слева или справа? Только по ABI смотреть?
источник

АК

Александр Караев in pro.cxx
Как это так - нет? )
стандарт описывает язык в терминах абстрактной машины, стек - это к реализациям конкретным в доку нужно идти (и учитывать unspecified behavior)
источник

DS

Dmitriy Salko in pro.cxx
Да это ясно, а есть ли способ как-то правильно определить, в какую вообще сторону растёт стек, чтобы его соответственно при реаллоке расположить слева или справа? Только по ABI смотреть?
насколько я знаю, стек всегда в одну сторону растет (от больших к меньшим адресам).
источник

in pro.cxx
Dmitriy Salko
насколько я знаю, стек всегда в одну сторону растет (от больших к меньшим адресам).
Ок, спасибо
источник

DS

Dmitriy Salko in pro.cxx
Ок, спасибо
Но лучше посмотрите как это кто-то уже пробовал делать. Там могут быть подводные камни
источник

in pro.cxx
Dmitriy Salko
Но лучше посмотрите как это кто-то уже пробовал делать. Там могут быть подводные камни
Я гуглю "c grow stack", и ничего особо не находится )
источник

EP

Egor Pugin in pro.cxx
Привет. А как realloc-нуть стек прямо в рантайме?
имеющийся вряд ли, но можно выделить память и записать этот адрес в регистр, и новый ip вызываемой функции тоже
источник

in pro.cxx
Egor Pugin
имеющийся вряд ли, но можно выделить память и записать этот адрес в регистр, и новый ip вызываемой функции тоже
Ну это ясно
источник

EP

Egor Pugin in pro.cxx
Ну это ясно
ок, тогда выделить память, скопировать туда текущий стек и регистр поменять
источник

O

Ofee in pro.cxx
Я гуглю "c grow stack", и ничего особо не находится )
источник

in pro.cxx
Ну так "c grow stack" != "C stack direction" )
источник

in pro.cxx
Это-то я нашёл
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Александр Караев
стандарт описывает язык в терминах абстрактной машины, стек - это к реализациям конкретным в доку нужно идти (и учитывать unspecified behavior)
и даже в посиксе нет?
источник

АК

Александр Караев in pro.cxx
Vyacheslav Olkhovchenkov
и даже в посиксе нет?
а причем тут POSIX?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
посикс не имеет отношения к си?
источник

АК

Александр Караев in pro.cxx
Vyacheslav Olkhovchenkov
посикс не имеет отношения к си?
POSIX is a superset of the standard C library, and it's important to note that it defers to it. If C and POSIX is ever in conflict, C wins.

я не специалист по чистому Си, но сомневаюсь, что в стандарте прописан конкретно POSIX
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize)
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
вот и стек. про alloca() вспоминать не буду, потому что не помню статуса стандарта для неё
источник