Подскажите, вопрос по памяти процеса
От: cupuyc.  
Дата: 30.01.15 16:44
Оценка:
Доброго времени суток.
Есть самая простая консольная программа:

#include "stdafx.h"

void func()
{
    char buffer[16]; // массив из 16 байт выделяется в памяти стека
}

int _tmain(int argc, _TCHAR* argv[])
{
    char* buffer = static_cast<char*> ( malloc(4) ); // выделение 4 байт памяти в куче и присвоение указателю на char
    
    func();

    char buffer[4]; // массив из 4 байт
    return 0;
}


Поправьте если я не прав в коде. Вопрос: в какой памяти выделяется массив из 4 байт.
Re: Подскажите, вопрос по памяти процеса
От: Sni4ok  
Дата: 30.01.15 17:05
Оценка: +1
Здравствуйте, cupuyc., Вы писали:

C>Поправьте если я не прав в коде. Вопрос: в какой памяти выделяется массив из 4 байт.


очевидно такая лабуда даже не скомпелируется- двойное определение
Re: Подскажите, вопрос по памяти процеса
От: Evgeniy Skvortsov Россия  
Дата: 30.01.15 17:18
Оценка:
Здравствуйте, cupuyc., Вы писали:

  Скрытый текст
C>
C>#include "stdafx.h"

C>void func()
C>{
C>    char buffer[16]; // массив из 16 байт выделяется в памяти стека
C>}

C>int _tmain(int argc, _TCHAR* argv[])
C>{
C>    char* buffer = static_cast<char*> ( malloc(4) ); // выделение 4 байт памяти в куче и присвоение указателю на char
    
C>    func();

C>    char buffer[4]; // массив из 4 байт
C>    return 0;
C>}
C>

C>Поправьте если я не прав в коде. Вопрос: в какой памяти выделяется массив из 4 байт.

Если исправить ошибку переопределения переменной buffer, то будет на стеке.
Это же очевидно. То же самое что и внутри функции func()
Или хотел какой-то хитрый финт ушами сделать ? Так компилятор не разрешит переопределить два раза переменную с одним именем.
Re: Подскажите, вопрос по памяти процеса
От: VladFein США  
Дата: 30.01.15 17:26
Оценка:
Здравствуйте, cupuyc., Вы писали:

C>Поправьте если я не прав в коде. Вопрос: в какой памяти выделяется массив из 4 байт.


В оперативной?

На стеке.
Интереснее вопрос — а где argv?
Re[2]: Подскажите, вопрос по памяти процеса
От: cupuyc.  
Дата: 30.01.15 19:07
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Здравствуйте, cupuyc., Вы писали:


ES>
  Скрытый текст
C>>
C>>#include "stdafx.h"

C>>void func()
C>>{
C>>    char buffer[16]; // массив из 16 байт выделяется в памяти стека
C>>}

C>>int _tmain(int argc, _TCHAR* argv[])
C>>{
C>>    char* buffer = static_cast<char*> ( malloc(4) ); // выделение 4 байт памяти в куче и присвоение указателю на char
    
C>>    func();

C>>    char buffer[4]; // массив из 4 байт
C>>    return 0;
C>>}
C>>


C>>Поправьте если я не прав в коде. Вопрос: в какой памяти выделяется массив из 4 байт.

ES>Если исправить ошибку переопределения переменной buffer, то будет на стеке.

ES>Это же очевидно. То же самое что и внутри функции func()
ES>Или хотел какой-то хитрый финт ушами сделать ? Так компилятор не разрешит переопределить два раза переменную с одним именем.

мой косяк. там должен быть buffer1.
получается функция main как обычная функция и хранит свои данные в стеке ?
Re[3]: Подскажите, вопрос по памяти процеса
От: LaptevVV Россия  
Дата: 30.01.15 20:55
Оценка:
Здравствуйте, cupuyc., Вы писали:

C>получается функция main как обычная функция и хранит свои данные в стеке ?

Да.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Подскажите, вопрос по памяти процеса
От: smeeld  
Дата: 30.01.15 21:54
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>На стеке.

VF>Интереснее вопрос — а где argv?

Ну и где argv? Ждёмс.
Re[3]: Подскажите, вопрос по памяти процеса
От: cupuyc.  
Дата: 31.01.15 07:14
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, VladFein, Вы писали:


VF>>На стеке.

VF>>Интереснее вопрос — а где argv?

S>Ну и где argv? Ждёмс.


#include "stdafx.h"

char buffer1[4]; // массив из 4 байт

void func()
{
    char buffer[16]; // массив из 16 байт выделяется в памяти стека
}

int _tmain(int argc, _TCHAR* argv[])
{
    char* buffer = static_cast <char*> ( malloc(4) ); // выделение 4 байт памяти в куче и присвоение указателю на char
    
    func();

    return 0;
}


потдерживаю, где хранится argv? теперь массив из 4 байт хранится в глобальной памяти (статической). Вот только что это за память и где находится?
Отредактировано 31.01.2015 7:21 cupuyc. . Предыдущая версия .
Re[4]: Подскажите, вопрос по памяти процеса
От: 0x7be СССР  
Дата: 31.01.15 09:05
Оценка:
Здравствуйте, cupuyc., Вы писали:

C>потдерживаю, где хранится argv? теперь массив из 4 байт хранится в глобальной памяти (статической). Вот только что это за память и где находится?

Здесь.
Re[4]: Подскажите, вопрос по памяти процеса
От: 0x7be СССР  
Дата: 31.01.15 09:09
Оценка: +1
Здравствуйте, cupuyc., Вы писали:

C>потдерживаю, где хранится argv?

Argv хранится на стеке.
Данные, на которые он указывает — в куче.
Re[5]: Подскажите, вопрос по памяти процеса
От: cupuyc.  
Дата: 31.01.15 11:17
Оценка:
спасибо, разобрался.
Re[4]: Подскажите, вопрос по памяти процеса
От: MasterZiv СССР  
Дата: 02.02.15 11:18
Оценка:
Здравствуйте, cupuyc., Вы писали:


C>потдерживаю, где хранится argv? теперь массив из 4 байт хранится в глобальной памяти (статической). Вот только что это за память и где находится?


А это неважно.
в какой-то памяти.
Вообще, там, где libc выделит.
И действительно, это не важно.
можно считать, что это делается в стеке до входа в main.
А можно считать, что до входа в main стека вообще никакого ещё нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.