Где в с++ выделяется память для создания строки(массива с char) при объявлении строки через указатель
const char* str = "Hello";
C/C++
Где в с++ выделяется память для создания строки?
В С++ память для создания строки может быть выделена в разных областях: стеке, куче или сегменте данных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; // освобождаем память
Например, если вы используете константный указатель на литерал строки, то строка будет храниться в сегменте данных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; // освобождаем память
При таком объявлении память выделяется в 2 местах:
Выделяется память для переменной s, содержащей адрес - в стеке, если это объявление внутри функции.
Выделяется непрерывный участок памяти размером 6 байт - в статической памяти, имеющей атрибут "только для чтения". В процессе загрузки программы в оперативную память этот участок памяти автоматически заполняется символами 'H', 'e', 'l', 'l', 'o', '\0'.
Выделяется память для переменной s, содержащей адрес - в стеке, если это объявление внутри функции.
Выделяется непрерывный участок памяти размером 6 байт - в статической памяти, имеющей атрибут "только для чтения". В процессе загрузки программы в оперативную память этот участок памяти автоматически заполняется символами 'H', 'e', 'l', 'l', 'o', '\0'.
Похожие вопросы
- Leetcode. Обнулить строки и столбцы матрицы с константным потреблением памяти.
- Как реализовать поиск похожей строки в базе данных?
- Найти максимальный элементы в строке матрицы
- Программирование на С++ (строки)
- Двумерный динамический массив с неизвестны количеством столбиков или строк
- Передача строк в функцию С++
- Синтаксическая ошибка: константа строки в с++
- C++: "С-Строка" и ошибка
- С++. Упорядочить строки массива A в порядке убывания сумм цифр первого элемента каждой строки.
- Переход на следующую строку при считывании данных из файла в Си