Здравствуйте, maks1180, Вы писали:
M>Можно ли такое реализовать на с/с++, без ассемблерных вставок ?
M>Есть ли какие-нибудь расшерения с/с++, что-бы такое делать ?
M>1. функция funcA вызывает funcB.
M>2. функция funcB, решает сколько ей нужно памяти, выделяет её в стеке и заполняет данными и возвращает указатель на выделенную память.
M>3. сразу после возврата из funcB, мы сдвигаем регистр ESP(RSP), что-бы следующие вызовы не порушили эту память. Теперь внутри funcA мы можем безопастно использовать память выделенную в стеке funcB.
Типа такого?
#include <functional>
void funcB(std::function<void(char*)> cb) {
int size=10+rand()%100; // deside
char buf[size]; // allocate
buf[0]=size&255; for(int i=1;i<size;i++) buf[i]=i&15; // prepare data
cb(buf);
}
void funcA() {
// code
funcB([](char* buf){
// code
});
// code
}