2015-09-21 4 views
1

Я пытаюсь выделить память своей «программой» - просто выделите ее и оставайтесь там - для целей тестирования. Когда я запускаю его на своем MacOS, Activity Monitor показывает, что он выделяет 1,6 ГБ, когда я его компилирую для Linux и запускаю там, он ничего не делает - он печатает сообщение, но барабан не используется на машине. Я делаю это неправильно? Есть ли способ лучше? Вот мой код:Тест распределения памяти Golang

package main 


import (
    "fmt" 
    "unsafe" 
    "time" 
) 


func main() { 
    var buffer [100 * 1024 * 1024]string 
    fmt.Printf("The size of the buffer is: %d bytes\n", unsafe.Sizeof(buffer)) 
    time.Sleep(300 * time.Second) 
} 

Сначала я использовал байт для моего типа массива, но это не сработало событие на моем mac?

+2

Измерение «сколько памяти используется» было простой задачей 25 лет назад. Это уже не так просто, поскольку существует быстрое количество различных типов «памяти». И «используется» - это очень неопределенный термин для памяти. Используйте инструментарий, предоставляемый 'go test -benchmem', чтобы увидеть, как« распределение тяжело »вашего кода. Этот показатель более надежный и более важный. – Volker

ответ

4

В вашем коде ничего не найдено, что требует: memory. Компилятор полностью в пределах своих прав, чтобы оптимизировать все выделение, и даже если компилятор этого не делает, ОС не будет совершить память - вы никогда не присваиваете ничего, поэтому, скорее всего, стр.

Я ничего не знаю о тонких различиях между любым используемым вами Linux и любым MacOS, который вы используете, поэтому мало что можно сказать с уверенностью. Вполне возможно, что ваш способ проверки памяти на вашей Linux-машине дает вам только зафиксированную память, в то время как вы видите всю виртуальную память на вашем MacOS, или могут быть другие тонкие различия. В любом случае, поскольку компиляторы стали умными, и поскольку у нас была виртуальная память на ПК, стало все труднее и труднее получать какие-либо значимые ориентиры - инструменты, с которыми мы работаем, обычно достаточно умны, чтобы избежать ненужных отходов; и большинство тестов, которые вы попробуете, в значительной степени совершенно ненужные.

Бенчмаркинг - это сложно.

+0

Спасибо, я просто играю и хочу посмотреть, что произойдет. Это: _ «В вашем коде нет ничего, что требует памяти. Компилятор полностью в пределах своих прав, чтобы оптимизировать все выделение, и даже если компилятор этого не делает» _ помог :) - я добавил 'для e, _: = диапазон буфера { \t \t buffer [e] = "string" } 'и теперь, когда я запускаю его в поле linux, используемая память получает 1,6 концерта. – plamer

Смежные вопросы