Эксперт NIX
3330 / 748 / 252
Регистрация: 28.06.2015
Сообщений: 1,543
Записей в блоге: 16
1

Определить размер памяти

18.05.2016, 16:52. Показов 1098. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Совсем запуталась.
Есть определение структуры
C
1
2
3
4
typedef struct offen {
char *open;
char *close;
} Offen;
Размером в 16 байт.
В главной функции еще есть определение
массива указателей на эту структуру.
C
1
Offen *p[4];
Когда я его определяю в стеке отводится дополнительное
место под локальные переменные в размере 32 байта, тоесть
по замеру самих указателей 4*8 (64 битная система).
Или будет отведено 4*16 байт по размеру самой структуры?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2016, 16:52
Ответы с готовыми решениями:

Определить размер свободной памяти
Здравствуйте, товарищи программисты! А не подскажете, как определить количество свободной...

Как програмно определить размер оперативной памяти
У меня такой вопрос: Как програмно определить размер оперативной памяти? В гугле ничё не нашёл...

Как определить точный размер оперативной памяти?
Приветствую. Есть функция: function GetMem: String; var MyMem: TMemoryStatus; begin...

Как определить размер занимаемый в памяти рользовательской переменной?
Мне нужно определить размер занимаемый в памяти пользовательской переменной типа: Public Type...

13
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.05.2016, 16:58 2
Цитата Сообщение от nezabudka Посмотреть сообщение
тоесть
по замеру самих указателей 4*8 (64 битная система)
да.
1
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
18.05.2016, 17:19 3
Цитата Сообщение от nezabudka Посмотреть сообщение
Совсем запуталась.
ни в первый раз
бывает.
Цитата Сообщение от nezabudka Посмотреть сообщение
Или будет отведено 4*16 байт по размеру самой структуры?
sizeof() надо использовать

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>;
#include <cstdlib>;
 
typedef struct offen {
    char *open;
    char *close;
} Offen;
 
int main()
{
    Offen *p[4];
    printf("%d    %d", sizeof(*p[4]), sizeof(p));
    system("pause");
    return 0;
}
1
Эксперт NIX
3330 / 748 / 252
Регистрация: 28.06.2015
Сообщений: 1,543
Записей в блоге: 16
18.05.2016, 17:34  [ТС] 4
SergioO, Где вы это все берете?
<cstdio>;
<cstdlib>;
system("pause");


Посмотрела через gdb, в стеке зарезервировалось 32 байта.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.05.2016, 18:04 5
Цитата Сообщение от SergioO Посмотреть сообщение
C
1
sizeof(*p[4])
Что это должно показать? UB?
Цитата Сообщение от SergioO Посмотреть сообщение
C
1
2
#include <cstdio>;
#include <cstdlib>;
Это из области C++, и точка с запятой тут лишняя
1
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
18.05.2016, 18:36 6
Цитата Сообщение от nezabudka Посмотреть сообщение
<cstdio>;
<cstdlib>;
system("pause");
это заголовочные файлы из С++14 стандарта для Си. Visual Studio
для читого Си
#include <stdio.h>
Цитата Сообщение от nezabudka Посмотреть сообщение
system("pause");
из той же оперы
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.05.2016, 18:42 7
Еще немного занудства:
Цитата Сообщение от SergioO Посмотреть сообщение
это заголовочные файлы из С++14 стандарта для Си. Visual Studio
В C++ заголовочные файлы с началом на c и без расширения h существовали задолго до C++ 14, и VS тут то же не при чем.
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
18.05.2016, 18:43 8
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Что это должно показать? UB?
размер структуры
C
1
2
printf("%zu\n", sizeof(*p[4]));
printf("%zu\n", sizeof(Offen));
8
8
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.05.2016, 18:45 9
Цитата Сообщение от SergioO Посмотреть сообщение
размер структуры
В данном случае это UB. Массив p из 4 элементов - следовательно максимально допустимый индекс 3. Поэтому то что будет выведено, если не упадет, будет зависеть от погоды на Марсе
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
18.05.2016, 18:46 10
Jewbacabra, "учись, пока батя живой"
C
1
printf("%zu\n", sizeof(*p[333]));
8
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.05.2016, 18:46 11
Цитата Сообщение от SergioO Посмотреть сообщение
"учись, пока батя живой"
Еще раз, это UB
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
18.05.2016, 18:50 12
C
1
printf("%zu\n", sizeof(*p[-273]));
8
он, вообще туда не смотрит
1
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
18.05.2016, 18:52 13
...
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.05.2016, 18:57 14
Цитата Сообщение от SergioO Посмотреть сообщение
он, вообще туда не смотрит
Ну да, ведь тип, а следовательно и размер можно определить на этапе компиляции. Но все равно глас режет, лучше нейтральный 0 туда поставить
0
18.05.2016, 18:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2016, 18:57
Помогаю со студенческими работами здесь

Как определить максимально возможный размер оперативной памяти для своего компьютера?
Собственно имеется 1 гиг оперативки и тормозящая при этом с завидной регулярностью максимальная...

[NASM] Определить размер первого участка памяти с нулевыми значениями двойных слов
Написать программу на языке ассемблера NASM, определяющую размер первого встретившегося участка...

Размер памяти.
Как вычислить размер занимаемой памяти? title:string; ntov:integer;

Размер памяти в байтах
Подскажите, пожалуйста, как узнать колл-во байт между двумя указателями? Т.е. к примеру: int *a...

Размер ячеек памяти
Каков размер ячеек памяти? Вычитал, что одна ячейка равна одному байту. Но тут возник вопрос: ...

Размер оперативной памяти
Доброго времени суток! Кто знает, как можно вывести на экран объем оперативки равный больше 4 гб?...


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

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

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