сколько займёт памяти массив int32
От: MadHuman Россия  
Дата: 08.12.17 11:30
Оценка:
Доброго дня всем!
допустим есть массив int32 размером n. сколько он будет физически занимать памяти (без учета заголовков) в 64-разрядном процессе
(машина и ос соотвественно тоже)?
размер int32 — 4байта, 4*n байт, то есть по физическому размеру элемента?
или физический размер слота под элемент массива будет выравниваться до 64бит (8байт) и соотвественно общий размер
будет 8*n байт?
Re: сколько займёт памяти массив int32
От: hardcase Пират http://nemerle.org
Дата: 08.12.17 11:53
Оценка: 2 (1)
Здравствуйте, MadHuman, Вы писали:

MH>размер int32 — 4байта, 4*n байт, то есть по физическому размеру элемента?


Да, по физическому размеру. Проверяется элементарно:

using System;

class Program
{
    unsafe static void Main(string[] args)
    {
        var array = new int[10];
        for (var i = 0; i < array.Length; ++i)
        {
            array[i] = i;
        }


        fixed (int* ptr = array)
        {
            byte* p = (byte*)ptr;
            for (var i = 0; i < array.Length; ++i)
            {
                Console.WriteLine(*((int*)p));
                p += 4;
            }
        }
    }
}
/* иЗвиНите зА неРовнЫй поЧерК */
Отредактировано 08.12.2017 11:54 hardcase . Предыдущая версия . Еще …
Отредактировано 08.12.2017 11:53 hardcase . Предыдущая версия .
Re[2]: сколько займёт памяти массив int32
От: MadHuman Россия  
Дата: 08.12.17 12:11
Оценка:
Здравствуйте, hardcase, Вы писали:

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


MH>>размер int32 — 4байта, 4*n байт, то есть по физическому размеру элемента?


H>Да, по физическому размеру. Проверяется элементарно:


да, спасибо. а когда тогда выравнивание происходит?
только для полей объекта/структуры? или ещё есть варианты?
Отредактировано 08.12.2017 12:11 MadHuman . Предыдущая версия .
Re[3]: Выравнивание
От: Qbit86 Кипр
Дата: 08.12.17 12:22
Оценка: 1 (1) +2
Здравствуйте, MadHuman, Вы писали:

MH>да, спасибо. а когда тогда выравнивание происходит?

MH>только для полей объекта/структуры? или ещё есть варианты?

С выравниванием полей объекта и объектов в массиве всё непросто. Может отличаться для разных рантаймов (Моно/Дотнет) или для разных версий рантайма: https://www.youtube.com/watch?v=XGtieBVI1lk
Глаза у меня добрые, но рубашка — смирительная!
Re: сколько займёт памяти массив int32
От: vitz  
Дата: 08.12.17 13:14
Оценка:
Здравствуйте, MadHuman, Вы писали:

Buffer.ByteLength
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.