1 / 1 / 0
Регистрация: 22.03.2020
Сообщений: 131
1

Сколько памяти (в байтах) займет данный массив: class Test { public: int c=0,r=0; double q = 0; }; Test *Mass = new Test

15.04.2020, 20:00. Показов 941. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сколько памяти (в байтах) займет данный массив:
C++
1
2
3
4
5
6
7
class Test
 {
 public: int c=0,
r=0; 
double q = 0;
 };
 Test *Mass = new Test[5];
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2020, 20:00
Ответы с готовыми решениями:

Nginx перенаправляет на http://site.ru/test.ru или http://test.ru/test.ru
Только, что поставил nginx + php-fpm по этой статье -...

Nunit Test для privat int[] и public void
Господа подскажите пожалуйста как написать НЮнит тест для вот этого Nunit Test для privat int и...

C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]|
class TUID { public: char Data; TUID (); operator ++ (); };

Функция file_exists(test/01.ogg) работает, если папка test находится в корневом каталоге моего сервера.
Столкнулся с интересной проблеммой. Функция file_exists(test/01.ogg) работает, если папка test...

10
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
15.04.2020, 20:02 2
5 * sizeof(Test) + выравнивание (если оно будет)
0
7538 / 6399 / 2918
Регистрация: 14.04.2014
Сообщений: 27,865
15.04.2020, 20:05 3
Что за выравнивание?
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
15.04.2020, 20:07 4
Цитата Сообщение от FaceProgrammist Посмотреть сообщение
Сколько памяти (в байтах) займет данный массив
Вопрос нечетко поставлен.

Во-первых, каковы размеры int и double на вашей платформе?

Во-вторых, размер массива Test[5] и количество памяти фактически выделенное new Test[5] - это разные вещи. О чем именно идет речь в вопросе?
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
15.04.2020, 20:12 5
Цитата Сообщение от nmcf Посмотреть сообщение
Что за выравнивание?
Возможно неверно назвал это явление, new может выделить блок памяти большего размера, чем требуется для хранения массива, и выравнивать его определенным образом по адресам памяти.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class Test
{
public: int c=0,
    r=0;
    double q = 0;
};
 
int main() {
    Test *Mass1 = new Test[5];
    Test *Mass2 = new Test[5];
    Test *Mass3 = new Test[5];
 
    cout << "size: " << sizeof (Test) * 5 << endl;
    cout << Mass1 << endl;
    cout << Mass2 << endl;
    cout << Mass3 << endl;
 
    return 0;
}
У меня выводит:
Код
size: 80
0x55d0b93671e0
0x55d0b9367240
0x55d0b93672a0
Разница адресов 96, хотя для массива достаточно было 80.
0
1 / 1 / 0
Регистрация: 22.03.2020
Сообщений: 131
15.04.2020, 20:13  [ТС] 6
я скоприровал вопрос полностью и контрольных вопросов
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
15.04.2020, 20:15 7
Цитата Сообщение от FaceProgrammist Посмотреть сообщение
я скоприровал вопрос полностью и контрольных вопросов
Это не меняет того факта, что вопрос нечетко поставлен.

Скорее всего ваши "контрольные вопросы" глобально подразумевают какую-то конкретную платформу. Но вы ее нам не называете.
0
7538 / 6399 / 2918
Регистрация: 14.04.2014
Сообщений: 27,865
15.04.2020, 20:19 8
valen10, странный у тебя способ определять по адресам. Они вообще могут в разных местах находиться.
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
15.04.2020, 20:36 9
Цитата Сообщение от nmcf Посмотреть сообщение
Они вообще могут в разных местах находиться
Да, согласен. Но тут больше похоже на то, что они расположены друг за другом.

Не уверен, что есть надежный способ узнать реально выделенный объем памяти. Видел на форуме подобную тему, где говорилось, что перед выделенным блоком может сохраняться такой размер (служебная информация для delete[]). Проверил сейчас интереса ради, но там оказалось число на 1 больше чем разница адресов. Иных вариантов не знаю, кроме как просто сказать 5 * sizeof(Test) + k, где k >= 0
0
7538 / 6399 / 2918
Регистрация: 14.04.2014
Сообщений: 27,865
15.04.2020, 20:38 10
Мне кажется, на уровне языка дальше 5 * sizeof(Test) рассуждать нет смысла.
1
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
15.04.2020, 20:50 11
Цитата Сообщение от valen10 Посмотреть сообщение
перед выделенным блоком может сохраняться такой размер (служебная информация для delete[])
Размер массива (то есть 5) сохраняется если

1. Класс имеет нетривиальный деструктор

или

2. Класс имеет перегруженный operator delete[](void *, size_t)

В данном случае ни того, ни другого нет, т.е. размер сохраняться не будет.

Размер всего блока в байтах, разумеется, сохраняется всегда, перед началом блока. (Хотя в релизной версии VS, например, как-то все хитрее).
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2020, 20:50
Помогаю со студенческими работами здесь

Что такое unit test и regression test
Что такое unit test и regression test?

Запишите в файл test.out все строки из файла test.in, в которых встречается слово "Hello"
В файле test.in записан текст на английском языке. Запишите в файл test.out все строки из файла...

Указатель на массив строк - В функции Test печатается непонятно что из памяти
Здравствуйте, Есть часть кода(см. ниже). Объясните, почему в функции Test печатается непонятно...

Почему команда «dir>test.txt» работает, а команда «ftp /?>test.txt» — нет?
Пробовала без пробелов, что тут еще можно попробовать непонятно Выводит в окно командной строки....

У себя на локале я пишу ссылку test.php?city=1 и в test.php он видет $city==1
У себя на локале я пишу ссылку test.php?city=1 и в test.php он видет $city==1 А на хосте не...

Не получается сконфигурировать Test::DBIx::Class
Здравствуйте! Решил разобраться с тестирование приложений использующих DBIx::Class с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru