Добавление одной простой строки в программу C ++ практически удваивает размер текстового раздела исполняемого файла [закC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Добавление одной простой строки в программу C ++ практически удваивает размер текстового раздела исполняемого файла [зак

Сообщение Anonymous »

Я создаю программу для микроконтроллера (RISC-V, если это имеет значение), и я столкнулся с проблемой с недоумением. У меня есть какой -то код, который компилируется на текст размер 6592 байтов. Но, если я добавлю единый оператор: < /p>

Код: Выделить всё

*buf++ = 0;
, где buf является Char*, текст размер меняется на 10816. Это происходит только в том случае, если я добавляю это оператор в определенном месте в определенной функции. Divdf3 , adddf3 и т. Д.) Из библиотеки Libgcc.a были добавлены, которых раньше не было (см. Прилагаемое изображение), ни одно из которых не имеет ничего общего с добавлением заявления, которое я добавил. Именно эти дополнительные функции добавляют дополнительное использование памяти, с объемным, исходящим от divdf3 (0x6b4) и addddf3 (0x708).
Я понимаю, что, вероятно, недостаточно информации, чтобы решить эту проблему, но, возможно, кто -то может предложить, что может произойти, и где можно найти, чтобы посмотреть, что это может произойти? Очень драгоценный ресурс. < /p>
Вот код для функции, которая вызывает проблему. Некоторые из кода были прокомментированы, потому что я пытался именно изолировать, что именно в этой функции вызвало внезапное увеличение. Строка 49 является рассматриваемым утверждением. Если я прокомментирую это утверждение и не внесу никаких других изменений в программу, размер текста значительно падает.

Код: Выделить всё

#include "Robot.h"
#include "Util.h"

void dtoa(char * buf, double value, int decimals)
{
if (decimals > MAX_DTOS_DECIMALS)
{
decimals = MAX_DTOS_DECIMALS;
}

if (value < 0)
{
*buf++ = '-';
value = -value;
}

if (value > 9223372036854775807.0)
{
*buf++ = '*';
}
else
{
double avg = 0.5;
for (int i = 0 ; i < decimals ; i++)
{
avg /= 10;
}
value += avg;

uint64_t iValue = (uint64_t) value;

if (iValue == 0)
{
// *buf++ = '0';
}
else
{
int i;
char digits[20];

for (i = 0 ; (iValue != 0) && (i < (int) sizeof(digits)) ; i++)
{
digits[i] = (iValue % 10) + '0';
iValue /= 10;
}

// for (--i ; i >= 0 ; i--)
{
*buf++ = 0;//digits[i];  

Подробнее здесь: [url]https://stackoverflow.com/questions/79643206/adding-a-single-simple-line-to-a-c-program-almost-doubles-the-size-of-the-text[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»