2014-12-31 2 views
0

데이터 유형별로 소비 된 메모리 (바이트 단위)를 찾고 싶습니다. 정수에 대해 size 메서드를 호출했습니다. 64 비트 시스템을 실행 중이므로 8을 반환했습니다.루비 배열의 메모리 할당 찾기

1.size # => 8 

마찬가지로 문자열 및 배열의 ​​경우 문자/정수 당 1 바이트를 반환합니다.

'a'.size # => 1 
['a'].size # => 1 
['a', 1].size # => 2 
  1. 왜 플로트에 대한 크기 방법이 없다?
  2. ['a', 1]과 같은 이종 배열을 사용해야합니까? 1 + 8 = 9 bytes (1은 char, 1은 8).
  3. size을 호출하여 루비 데이터 형식에 할당 된 메모리를 확인하는 것이 맞습니까?
+0

배열의 경우 size 메서드는 배열의 길이 메서드 (별칭은 배열의 요소 수)에 대한 별칭 일뿐입니다. 마찬가지로, 문자열의 경우 size 메소드는 문자열의 문자 길이에 불과합니다. – rakeshbs

+2

제목에 배열에 '크기'가 없음을 나타냅니다. 본문에서, 당신은 float가 가지고 있지 않음을 나타냅니다. 무슨 뜻인지 확실하지 않습니다. – sawa

+0

''€ π'.size'는'2'를 반환합니다; 그래서'.size'는 * bytes가 아닌 * 문자 수를 문자열로 계산합니다. – Carpetsmoker

답변

3

두 가지 다른 방법으로 서로 다른 두 가지 데이터 유형에 서로 다른 용도로 사용할 수 있습니다.

예 1에서 size을 fixnum에 적용하고 있습니다. 이 방법

Returns the number of bytes in the machine representation of fix. 

소스 : 배열로 사용될 때 http://www.ruby-doc.org/core-2.2.0/Fixnum.html#method-i-size

그러나 sizelength 별칭이다. 여기 : http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-size. 어떤 :

Returns the number of elements in self. May be zero. 
1

Array#size 오히려 할당 된 메모리보다 Array의 요소의 수를 반환합니다.

6

MRI 메모리 사용량을 찾고 있다고 생각합니다. Ruby has ObjectSpace : objspace 라이브러리는 ObjectSpace 모듈을 확장하고 객체/메모리 관리에 대한 내부 통계 정보를 얻기위한 몇 가지 메소드를 추가합니다.

이 확장 모듈을 사용하려면 'objspace'가 필요합니다. 여기

당신이 얻을 것이다 무엇 :

> require 'objspace' 
=> true 
> ObjectSpace.memsize_of(Array) 
=> 5096 
> ObjectSpace.memsize_of(Hash) 
=> 3304 
> ObjectSpace.memsize_of(String) 
=> 6344 
> ObjectSpace.memsize_of(Integer) 
=> 1768 

참고 : 는 일반적으로, 당신은 당신이 MRI 구현에 대한 사용이 라이브러리를 알지 못하지 말아야합니다. 주로이 라이브러리는 MRI 메모리 사용에 대해 알아야하는 (메모리) 프로파일 러 개발자 및 MRI 개발자를위한 라이브러리입니다.

+0

이 메서드의 설명서에서 : * 반환 크기가 불완전합니다. 이 정보는 힌트로 처리해야합니다. 특히 T_DATA의 크기가 올바르지 않을 수 있습니다. * – spickermann

+0

@spickermann : 네 말이 맞습니다. 실제로 나는 이것을 개발하는 데 절대로 사용할 필요가 없습니다.OP가 요청한 것처럼 나는 또한이 솔루션을 알고 열망했습니다. –