Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 538
#1

выделение памяти new и ее подсчет _msize - C++

05.02.2014, 15:04. Просмотров 1944. Ответов 20
Метки нет (Все метки)

C++
1
2
3
void* a;
        a=new char[1];
        int size=_msize(a);
почему размер 12?
для
C++
1
2
3
void* a;
        a=new char[13];
        int size=_msize(a);
размер 20
для
C++
1
2
3
void* a;
        a=new char[100];
        int size=_msize(a);
размер 104
для
C++
1
2
3
void* a;
        a=new char[200];
        int size=_msize(a);
размер 204
а как 12 насчитывается? Для int, double, short тоже 12 почему?

Добавлено через 6 минут
Задача вообще говоря определить число элементов в массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:08     выделение памяти new и ее подсчет _msize #2
C++
_msize(a);
откуда такая функция? Почему не sizeof()?

Добавлено через 3 минуты
Цитата Сообщение от klynxe Посмотреть сообщение
Задача вообще говоря определить число элементов в массиве
Его не нужно определять, так как вы сами его задаете в квадратных скобках.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 538
05.02.2014, 15:22  [ТС]     выделение памяти new и ее подсчет _msize #3
Цитата Сообщение от programina Посмотреть сообщение
Почему не sizeof()
возвращает размер указателя а не размер массива
Цитата Сообщение от programina Посмотреть сообщение
Его не нужно определять, так как вы сами его задаете в квадратных скобках.
У меня 5-ти первый массив разной длинны внутри и с разными типами данных, мне тогда нужен еще 4-ех мерный массив для хранения длинны каждого массива
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:26     выделение памяти new и ее подсчет _msize #4
klynxe, а почему не хотите писать char вместо void?

Добавлено через 1 минуту
и все таки что за _msize?
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 538
05.02.2014, 15:28  [ТС]     выделение памяти new и ее подсчет _msize #5
Цитата Сообщение от programina Посмотреть сообщение
klynxe, а почему не хотите писать char вместо void?
Потому что у меня 5-ти мерный массив в котором разные типы

Добавлено через 1 минуту
Цитата Сообщение от programina Посмотреть сообщение
msize
Функция должна возвращать размер выделенной памяти...
из #include <malloc.h>
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
05.02.2014, 15:29     выделение памяти new и ее подсчет _msize #6
Впервые сталкиваюсь с msize! это из нового стандарта? Или это какой-то макрос, специфичный для некоего компилятора?
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 538
05.02.2014, 15:30  [ТС]     выделение памяти new и ее подсчет _msize #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
msize
Наберите в гугле, знаю что подключается из <malloc.h> у меня билдер 6
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
05.02.2014, 15:34     выделение памяти new и ее подсчет _msize #8
klynxe, В вижуал студио 2012 проблем не возникает. Либо попробуйте память через маллок выделить, если что либо изменит это
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:37     выделение памяти new и ее подсчет _msize #9
если маллок, то нужно юзать сишное выделение памяти.
SatanaXIII
Супер-модератор
Эксперт С++
5603 / 2637 / 242
Регистрация: 01.11.2011
Сообщений: 6,496
Завершенные тесты: 1
05.02.2014, 15:39     выделение памяти new и ее подсчет _msize #10
Да, действительно. Билдер знает об этой функции:
Описание
Header File
malloc.h

Category
Memory Routines

Prototype
size_t _msize(void *block);

Description
Returns the size of a heap block.

_msize returns the size of the allocated heap block whose address is block. The block must have been allocated with malloc, calloc, or realloc. The returned size can be larger than the number of bytes originally requested when the block was allocated.

Return Value
_msize returns the size of the block in bytes.

Пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <malloc.h>        /* malloc() _msize() */
#include <stdio.h>            /* printf() */
 
int main( )
{
  int size;
  int *buffer;
 
  buffer = malloc(100 * sizeof(int));
  size = _msize(buffer);
  printf("Allocated %d bytes for 100 integers\n", size);
 
  return(0);
}
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
05.02.2014, 15:44     выделение памяти new и ее подсчет _msize #11
Что препятствует использованию контейнеров stl?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
05.02.2014, 15:45     выделение памяти new и ее подсчет _msize #12
Kuzia domovenok, это Си-шная функция, которая используется ТС-ом не по назначению.
klynxe, раз уж используете функции из Си, то и выделяйте память соответствующе и не лезьте к С++ операторам.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
05.02.2014, 16:10     выделение памяти new и ее подсчет _msize #13
zelim, ты уверен, что это стандартная сишная функция, а не какое-либо расширение, зависящее от ОС или компилятора?
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
05.02.2014, 16:28     выделение памяти new и ее подсчет _msize #14
http://docwiki.embarcadero.com/RADStudio/XE3/en/Msize
Returns the size of a heap block.

_msize returns the size of the allocated heap block whose address is block. The block must have been allocated with malloc, calloc, or realloc.The returned size can be larger than the number of bytes originally requested when the block was allocated.
Добавлено через 6 минут
Цитата Сообщение от klynxe Посмотреть сообщение
Задача вообще говоря определить число элементов в массиве
сохранить при выделении. В чем проблема то?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 16:34     выделение памяти new и ее подсчет _msize
Еще ссылки по теме:
C++ выделение памяти
C++ Выделение памяти
Выделение памяти C++
Выделение памяти C++
Выделение памяти C++

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
05.02.2014, 16:34     выделение памяти new и ее подсчет _msize #15
Croessmah, тогда malloc+placement new и можно использовать _msize!
Yandex
Объявления
05.02.2014, 16:34     выделение памяти new и ее подсчет _msize
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru