# How do I get the memory size of a BigInt?

**URL:** https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524
**Category:** New to Julia
**Created:** [March 26, 2022, 8:35pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524 "2022-03-26T20:35:25Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![MHellmund](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mhellmund/32/34946_2.png) [@MHellmund](https://discourse.julialang.org/u/MHellmund)
#### Post date: [March 26, 2022, 8:35pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/1 "2022-03-26T20:35:25Z")

</div>

How do I get the memory size of a BigInt?  
What I tried:

```julia
julia> x=big(3)^300
136891479058588375991326027382088315966463695625337436471480190078368997177499076593800206155688941388250484440597994042813512732765695774566001

julia> sizeof(x)
16

julia> Base.summarysize(x)
16

```

Thanks!

---

<div class="post-metadata">

### Author: ![goerch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerch/32/29122_2.png) [@goerch](https://discourse.julialang.org/u/goerch)
#### Post date: [March 26, 2022, 8:41pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/2 "2022-03-26T20:41:05Z")

</div>

There is

```julia
x=big(3)^300

@show Base.GMP.MPZ.sizeinbase(x,2)

```

yielding

```julia
Base.GMP.MPZ.sizeinbase(x, 2) = 476

```

but it doesn’t seem to be part of the public interface.

---

<div class="post-metadata">

### Author: ![MHellmund](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mhellmund/32/34946_2.png) [@MHellmund](https://discourse.julialang.org/u/MHellmund)
#### Post date: [March 26, 2022, 9:56pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/3 "2022-03-26T21:56:43Z")

</div>

OK, this provides the number of digits in the given base.

I was more thinking about the actual amount of memory used. But I realize now that this is probably a bad question since Julia uses GMP for BigInts and GMP has its own nontrivial memory management and allocates memory outside the control of Julia.

So your answer provides a lower bound and, assuming that the overhead is not that big, a good estimator for the actual memory consumption.

Thank you,

---

<div class="post-metadata">

### Author: ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)
#### Post date: [March 28, 2022, 10:30am UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/4 "2022-03-28T10:30:42Z")

</div>

I think you can get the allocated memory via the `.alloc` field, e.g.

```julia
julia> b = big(2)^512; (b.size, b.alloc)
(9, 13)

julia> 13 * Base.GMP.BITS_PER_LIMB / 8 # total number of allocated bytes
104.0

```

---

<div class="post-metadata">

### Author: ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)
#### Post date: [March 28, 2022, 1:19pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/5 "2022-03-28T13:19:02Z")

</div>

> [@goerch](#):
>
> ```julia
> Base.GMP.MPZ.sizeinbase(x, 2) = 476
> 
> ```
> 
> but it doesn’t seem to be part of the public interface.

Also, what is documented is `ndigits`:

```julia
julia> ndigits(x, base=2)
476

```

---

<div class="post-metadata">

### Author: ![MHellmund](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mhellmund/32/34946_2.png) [@MHellmund](https://discourse.julialang.org/u/MHellmund)
#### Post date: [March 28, 2022, 1:35pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/6 "2022-03-28T13:35:06Z")

</div>

Thank you!

```julia
j=big(17)^400;

for i = 1:10
    b=j^i
    limbs = b.size
    alloc = b.alloc
    minlimbs = ndigits(b, base=2) / Base.GMP.BITS_PER_LIMB 
    println("$alloc $limbs $minlimbs")
end

```

gives

allocs #limbs ndigits/limbsize

```nohighlight
52 52 51.09375
81 77 76.640625
107 103 102.1875
132 128 127.734375
158 154 153.28125
183 179 178.828125
209 205 204.375
234 230 229.921875
260 256 255.46875

```

so we have  
`b.size = #limbs = ceil( ndigits(b,2)/ limbsize)` and  
`b.alloc = actually allocated memory (in units of limbsize)`

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [March 28, 2022, 2:28pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/7 "2022-03-28T14:28:35Z")

</div>

I really think that `summarysize` should be taught about this so that it reports the memory used by BigInts accurately. Same deal with BigFloats too. Anyone want to file an issue or open a PR?

---

<div class="post-metadata">

### Author: ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)
#### Post date: [March 28, 2022, 3:38pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/8 "2022-03-28T15:38:21Z")

</div>

> [@StefanKarpinski](#):
>
> Same deal with BigFloats too

This is probably already fine for `BigFloat` as they store their data inline in a `String` field.

---

<div class="post-metadata">

### Author: ![MHellmund](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mhellmund/32/34946_2.png) [@MHellmund](https://discourse.julialang.org/u/MHellmund)
#### Post date: [March 28, 2022, 7:22pm UTC](https://discourse.julialang.org/t/how-do-i-get-the-memory-size-of-a-bigint/78524/9 "2022-03-28T19:22:14Z")

</div>

[https://github.com/JuliaLang/julia/issues/44780](https://github.com/JuliaLang/julia/issues/44780)
