мы не должны разжёвывать им инфу
Речь не идет о макроассемблере.
выделение и освобождение памяти в стеке это изменение одного регистра, один такт.
Мы с вами говорим об совсем разных сущностях.
Между ними есть биекция.
В чем разница?
Число операций для доступа к 'a' в обоих случаях одинакого.
struct stack
{
char *data;
struct stack *next;
};
Просто взгялнув на строчку кода нельзя дать однозначный ответ в какой физический регистр будет осуществен доступ.
Т.е. когда вы будете в куче выделять память, то оверхеда не будет?
Что бы достать значение из стека не обязательно доставать элементы по очереди.
Ни одна команда или микрокоманда не может быть исполнена менее чем за 1 такт.
Раз это такая же память, то как получить адрес регистра?
О каком оверхеде вы говорите?
Вы о каком стеке говорите то?
Я знаю что такое микрокод.
Куда уж быстрее, чем один такт? Полтакта? Компьютеры так не работают.
Что простите? Ассемблер это просто человекочитаемый машинный код.
Каждая строчка на ассемблере однозначно кодируется машинной командой с точностью до смещений.
Вы так и не объяснили, почему большой стек медленнее маленького?
Какие ваши доказательства?
Один такт это одно переключение транзистора.
Как можно сделать какую-то работу, не переключив ничего?
Куда уж быстрее, чем один такт?
Полтакта? Компьютеры так не работают
чем больше стек, тем он медленнее
Это на порядки быстрее кучи.
У вас есть 3 варианта подмены/генерации (в порядке убывания сложности и возрастания скорости):
1) использовать кодовый кодер/декордер, но подменить пиксели (это долго, требует много ресурсов, но проще всего; уже кто-то дал ответ на C#)
2) использовать архиватор, но подменить коэффициенты (извлечь из архива данные и подменить их; вам надо знать алгоритм сжатия)
3) просто подменить байты в файле (подменить данные в архиве; вам надо знать позицию данных, чтобы просмотрщик картинок смог их показать, но это самый быстрый и менее затратный способ)