Ніяк. Що, Ви тут зібралися оптимізувати?
Гінці за макросекундамі.
Якщо рядок буде не втрутитися (Близько 500 символів вміщує компілятор. Точного значення не скажу.)
Скористайтеся методом від Daniel Cortez
А чи можна якось скоротити розмір виділеної пам'яті? На виклик функції виділяється порядком 740 байт, якщо врахувати планку в 16384 байт, то значення вельми вражає.
Повідомлення від Untonyst
Якщо функція викликається один раз, то краще код безпосередньо брати (НЕ stock)
Функція викликається порядком 5-ти разів
І слідом питання
А, що буде якщо спробувати не допустити баг формату під час стиснення рядків? За результатами компіляції - пам'яті виділяється на третину меньше.Да і в грі начебто все працює на відмінно
Функції format і printf не вміють правильно працювати з упакованими рядками (як в форматної рядку, так і в форматується параметрах).
Що не так вже й дивно, якщо врахувати, що до цих функцій торкався куй.
- Більш ваш код оптимізувати не можна, але, проте можна «хімічити» з асемблером, але це навряд чи щось змінить.
- Другий запропонований варіант дійсно менше займає пам'яті, адже функція strcat перетворює рядок у «упакований» вид, але, проте ви викликаєте велику кількість функцій, що не дуже раціонально.
Висновок: Ваш перший варіант буде на багато продуктивніше, ніж другий.
Повідомлення від VVWVV
- Більш ваш код оптимізувати не можна, але, проте можна «хімічити» з асемблером, але це навряд чи щось змінить.
- Другий запропонований варіант дійсно менше займає пам'яті, адже функція strcat перетворює рядок у «упакований» вид, але, проте ви викликаєте велику кількість функцій, що не дуже раціонально.
Висновок: Ваш перший варіант буде на багато продуктивніше, ніж другий.
А як взагалі підраховується розмір стека?
Помітив, що не завжди при створення нового масиву змінюється розмір стека.
Ось наприклад якщо створювати масив в окремо виведеному стоці, то розмір стека увелічівается.А якщо ж масив оголосити в команді, (dc_cmd) то розмір стека залишається не зміниться (але знову таки: раз на раз не пріходіться.Одін раз змінюється, один раз немає
Повідомлення від VVWVV
- Другий запропонований варіант дійсно менше займає пам'яті, адже функція strcat перетворює рядок у «упакований» вид, але, проте ви викликаєте велику кількість функцій, що не дуже раціонально.
Висновок: Ваш перший варіант буде на багато продуктивніше, ніж другий.
А якщо зменшити кількість викликів функції strcat?
Я так розумію, що це нічого не змінить, і продуктивніше все також буде перший варіант
Шукав я собі книгу: "Чарльз Петцольд: Код. Таємний мову інформатики" в паперовому варіанті, так і не знайшов.
Гарна книга. Але, навряд чи там є опис роботи компіляторів.
Так само я б порадив: Досконалий код - Стів Макконнелл
Книга, дуже хороша. Описано більшість алгоритмів. Робота циклів, операторів, etc.
Pawn - не найкращий мову програмування. Вивчаючи його Ви вивчаєте погану практику програмування. У Pawn використовується методи Сі89 (близько того).
Якщо заради захоплення - то можна вивчати Pawn. Якщо Ви хочете продовжити своє життя з "комп'ютером" - то варто вибрати, що то важче. Я б на цей трапилося порадив: Lua. Squirrel. Python. node.js
І на цьому можна програмувати під SA-MP, звичайно треба знати як працює Pawn Virtual Machine (PVM)
Але при це всім, треба розуміти, що підтримку плагінів навряд чи введуть. У те, що трапилося оновленні серверної частини (Оновлення SA-MP від розробників), Вам доведеться самостійно додавати функції, який було анонсовано.
На рахунок скроневої, циферок, букв: Це assembler. На ранніх стадіях розробки - Вам це буде не потрібно. Зараз мало хто пише assembler, але лістинг знати бажано. Майже, всі програми переводяться в assembler
Value your freedom or you will lose it, teaches history. "Do not bother us with politics," respond those who do not want to learn. (C) Richard Stallman