| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Как выделить память в куче (heap) и проверить это? |
| Автор: HappyCoder 31.5.2007, 21:34 | ||||
Что-то непонятное получилось. Или я чего-то не понимаю. Память была выделена в стеке. Как выделить её в куче? Пробовал выделять больше, но всё равно в стеке выделяется. WTF?
|
| Автор: archimed7592 31.5.2007, 21:41 |
| неа... выдели мегов 10 - увидишь |
| Автор: HappyCoder 31.5.2007, 22:06 | ||||||
Выделил 40 мегов разом и увидел
Но с realloc что-то не получается. Пишет, что в стеке. Выделил 32 мега. Я неправильно пользуюсь valgrind-ом?
|
| Автор: MAKCim 1.6.2007, 08:50 | ||||
не в стеке
напиши вывод
|
| Автор: archimed7592 1.6.2007, 08:53 | ||
а лучше
|
| Автор: MAKCim 1.6.2007, 09:06 |
| обычно виртуальное адресное пространство процесса (0x00000000 - 0xBFFFFFFF) распределяется следующим образом ---------------------------------------- 0xBFFFFFFF Динамические библиотеки ---------------------------------------- STACK (растет вниз) HEAP (растет вверх) ---------------------------------------- BSS ---------------------------------------- DATA ---------------------------------------- Разные секции (GOT, RODATA, ...) ---------------------------------------- CODE ---------------------------------------- Разные секции (INTERP, HASH, ...) ---------------------------------------- NULL ---------------------------------------- 0x00000000 т. е для радовой программы "дыра" между вершиной кучи и низом стека очень большая |
| Автор: HappyCoder 1.6.2007, 12:53 | ||||||||||
это при:
Вывод этого:
такой:
Это адрес, по которому лежит указатель?
|
| Автор: MAKCim 1.6.2007, 14:39 |
ну вот, как можно видеть, ни а каком выделении в стеке речь не идет кстати, адреса какие-то непонятные я так понял, у тебя 64-х разрядная машина почему тогда адреса не 64-х разрядные? |
| Автор: HappyCoder 1.6.2007, 22:17 | ||
Да, у меня Gentoo Linux x86_64 на AMD Turion ML-32 и gcc-4.1.2 Не знаю даже. Я особо не разбираюсь ещё. Во всяком случае, у меня указатели по 8 байт. |
| Автор: bsa 2.6.2007, 15:59 | ||
Все правильно. у тебя sizeof(long) == sizeof(void*) == 8. |