docs: def _store_in_native_memory(self, data, data_type, addr=None):
          """
          Store in native memory.
  
          :param data:      Either a single value or a list.
                            Lists get interpreted as an array.
          :param data_type: Java type of the element(s).
          :param addr:      Native store address.
                            If not set, native memory is allocated.
          :return:          Native addr of the stored data.
          """
          # check if addr is symbolic
          if addr is not None and self.state.solver.symbolic(addr):
              raise NotImplementedError('Symbolic addresses are not supported.')
          # lookup native size of the type
          type_size = ArchSoot.sizeof[data_type]
          native_memory_endness = self.state.arch.memory_endness
          # store single value
          if isinstance(data, int):
              if addr is None:
                  addr = self._allocate_native_memory(size=type_size//8)
              value = self.state.solver.BVV(data, type_size)
              self.state.memory.store(addr, value, endness=native_memory_endness)
          # store array
          elif isinstance(data, list):
              if addr is None:
                  addr = self._allocate_native_memory(size=type_size*len(data)//8)
              for idx, value in enumerate(data):
                  memory_addr = addr+idx*type_size//8
                  self.state.memory.store(memory_addr, value, endness=native_memory_endness)
          # return native addr
          return addr