powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сколько фактически выделяет malloc,calloc или new
21 сообщений из 21, страница 1 из 1
Сколько фактически выделяет malloc,calloc или new
    #33779883
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос теоретический:
Выделяю памать, скажет даже
char a;
char b;
так вот ((unsigned char)&b-(unsigned char)&a) около 128 байт.

В чем дело?
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33779990
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во первых.
почему unsigned char?
поставь int.

во вторых, ни new ни malloc ты не вызываешь.
ты доверяешь размещение объектов компилятору.
а он сделает это в стеке.
а в стеке, как всем известно, все задом наперед :)
тоесть фактически в памяти сначала идет b а уже затем a.
и разница между &b и &a == -1
ну так как ты поставил unsigned то минуса в твоем результате быть не может.

далее ты поставил char и значит ограничил результат 8ми битами.

и совершенно законно получил вместо -1, 128.
ясно?
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780396
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда почему:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 	char *eeee;
	int i;
	char **e;
	printf("\n\nlast:\n");
	e=(char**)calloc( 100000 ,sizeof(char*));
	printf("size e=%d\n",sizeof(e));
	for(i= 0 ;i< 100000 ;i++){
		e[i]=(char*)malloc( 1 );
	}
Съедает около 5300 килобайт, а
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	char *eeee;
	int i;
	char **e;
	printf("\n\nlast:\n");
	e=(char**)calloc( 100000 ,sizeof(char*));
	printf("size e=%d\n",sizeof(e));
	for(i= 0 ;i< 100000 ;i++){
		eeee=(char*)malloc( 1 );
		e[i]=(char*)malloc( 1 );
		free(eeee);
	}
7500Кб?
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780418
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну я так не играю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	char a;
	char b;
	char *aa;
	char *bb;
	
	aa=(char*)malloc( 1 );
	bb=(char*)malloc( 1 );

	printf("&a-&b=%d\n",(long)&a-(long)&b);
	printf("&aa-&bb=%d\n",(long)aa-(long)bb);
выводит 4 и 48!
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780447
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gcc 3.4.1 дает
1 и 32

вообще суть работы malloc не прозрачна для разработчика насколько мне известно.
как хочет так и разместит. главное результат.
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780460
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще говоря под динамическую переменную добавляется 40 байт и округляется до кратному 8:
до 8 - 48
до 24 - 64
и т.д.
(MSVC 6)

На Eclipse под любую динамику выделяется место, кратное 128 байт.
т.е. под 1 - 128
под 129 -256...

А некоторые говорят, что в никсе выделяется нормально.
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780497
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это что за компилятор такой Eclipse
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780509
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kэто что за компилятор такой Eclipse
Это среда разработки для Жавы
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780539
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я знаю что такое eclipse :)
я просто хотел сказать что не eclipse выделяет место, а компилятор. или операционная система.

у явы наверняка ывделение памяти зависит от виртуальной машины, которых не так много :)
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780558
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin, посмотри ещё &aa-&bb
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780566
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoAklin, посмотри ещё &aa-&bb
оппа!
вот это я просмотрел :)
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780673
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
процы сейчас быстрые, а памяти много, надо же их чем-нибудь занять :о)
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780678
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kоппа!
вот это я просмотрел :)а гнутый сколько показывает?
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33780706
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, я с интами тестил, показывает 12
int *ii,*jj,*kk;
&ii-&jj;
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781048
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781300
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хмм... да, в релиз соптимайзилось нормально.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781365
dakdark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот простейшая програмка с динамическим выделением памяти
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#include <iostream>
int main(){
	char **root;
	root=new char*[ 1 << 20 ];
	for(int i= 0 ;i<( 1 << 20 );i++)
		root[i]=new char;
	return  0 ;
}
если заменить на статик,то займет 1mb, а так 20mb
что-то не очень экономно будет. Я понимаю, что надо
как-то отмечать свободную память, не давать выход за
её пределы и быстро искать свободные области, но каждый
компилятор выделяет по своему, с разной потерей. Например
под
Код: plaintext
1.
2.
3.
char *a,*b;
a=new char;
b=new char;
b-a;//  16 

а под
Код: plaintext
int *a,*b; ... b-a //  4  т.е один к одному

так что вопрос:
чем регламентируется кол-во дополнительной информации, и каково её содержание. про банальное выравнивание по кеш линейкам не забудем :)
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781380
dakdark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoпроцы сейчас быстрые, а памяти много, надо же их чем-нибудь занять :о)

скажем, в вопросах поиска по большим объемам данных и терабайта мало
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781429
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkDark
чем регламентируется кол-во дополнительной информации, и каково её содержание. про банальное выравнивание по кеш линейкам не забудем :)

Вопрос интересный. Скорее всего, это определяется
1) архитектурой 2) моделью памяти (для кучи).

Вообще, сама задача выделения множества кусочков памяти
по 1 char-у кажется мне немного странной. Может лучше
пересмотреть постановку?
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781500
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно ещё тут почитать.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Сколько фактически выделяет malloc,calloc или new
    #33781761
dakdark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно и самим написать требуемый менеджер памяти, или что-то вроде
этого
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сколько фактически выделяет malloc,calloc или new
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]