code: def _get_destination(self, estimated_size):
          
          global _psutil_load_attempted
          if not _psutil_load_attempted:
              _psutil_load_attempted = True
              try:
                  import psutil
              except ImportError:
                  psutil = None
  
          if self.verbose and estimated_size > 1:
              self.logger.debug("The Frame is estimated to require %s bytes"
                                % humanize_bytes(estimated_size))
          if estimated_size < 1024 or psutil is None:
              return None
          vm = psutil.virtual_memory()
          if self.verbose:
              self.logger.debug("Memory available = %s (out of %s)"
                                % (humanize_bytes(vm.available),
                                   humanize_bytes(vm.total)))
          if (estimated_size < vm.available and self._save_to is None or
                  self._save_to == "memory"):
              if self.verbose:
                  self.logger.debug("Frame will be loaded into memory")
              return None
          else:
              if self._save_to:
                  tmpdir = self._save_to
                  os.makedirs(tmpdir)
              else:
                  tmpdir = tempfile.mkdtemp()
              du = psutil.disk_usage(tmpdir)
              if self.verbose:
                  self.logger.debug("Free disk space on drive %s = %s"
                                    % (os.path.splitdrive(tmpdir)[0] or "/",
                                       humanize_bytes(du.free)))
              if du.free > estimated_size or self._save_to:
                  if self.verbose:
                      self.logger.debug("Frame will be stored in %s"
                                        % tmpdir)
                  return tmpdir
          raise RuntimeError("The Frame is estimated to require at lest %s "
                             "of memory, and you don't have that much available "
                             "either in RAM or on a hard drive."
                             % humanize_bytes(estimated_size))
docs: Invoked from the C level, this function will return either the name of
          the folder where the datatable is to be saved; or None, indicating that
          the datatable should be read into RAM. This function may also raise an
          exception if it determines that it cannot find a good strategy to
          handle a dataset of the requested size.