C/C++

Где в с++ выделяется память для создания строки?

Где в с++ выделяется память для создания строки(массива с char) при объявлении строки через указатель
const char* str = "Hello";
В С++ память для создания строки может быть выделена в разных областях: стеке, куче или сегменте данных1. В зависимости от того, как вы объявляете и инициализируете строку, она будет храниться в одной из этих областей.

Например, если вы используете константный указатель на литерал строки, то строка будет храниться в сегменте данных1, который является частью области памяти программы. Это означает, что строка не может быть изменена и её память не нужно освобождать.

const char* s = “Hello, World!”;

Если вы используете массив символов для хранения строки, то он будет выделен на стеке1, который является частью области памяти потока исполнения. Это означает, что строка может быть изменена и её память будет автоматически освобождена при выходе из области видимости.

char s[] = “Hello, World!”;

Если вы используете динамическое выделение памяти для хранения строки с помощью функций malloc или new2, то она будет выделена на куче1, которая является частью общей области памяти программы. Это означает, что строка может быть изменена и её размер может быть изменён при необходимости. Однако её память нужно освобождать вручную с помощью функций free или delete2.

char s = (char)malloc(14); // 14 байт для 13 символов + нуль-терминатор strcpy(s,“Hello, World!”); free(s); // освобождаем память

или

char *s = new char[14]; // 14 байт для 13 символов + нуль-терминатор strcpy(s,“Hello, World!”); delete[] s; // освобождаем память
Геннадий Зверев
Геннадий Зверев
7 340
Лучший ответ
При таком объявлении память выделяется в 2 местах:

Выделяется память для переменной s, содержащей адрес - в стеке, если это объявление внутри функции.

Выделяется непрерывный участок памяти размером 6 байт - в статической памяти, имеющей атрибут "только для чтения". В процессе загрузки программы в оперативную память этот участок памяти автоматически заполняется символами 'H', 'e', 'l', 'l', 'o', '\0'.
VR
Viki Rana
72 177