Quiero asignar mis búferes de acuerdo con la memoria disponible. De modo que, cuando lo hago, el procesamiento y el uso de la memoria aumentan, pero aún permanece en los límites de memoria disponibles. ¿Hay alguna manera de obtener memoria disponible (no sé si el estado de la memoria virtual o física hará alguna diferencia?). El método tiene que ser plataforma independiente ya que se usará en Windows, OS X, Linux y AIX. (Y si es posible, también me gustaría asignar algo de memoria disponible para mi aplicación, alguien no cambia durante la ejecución).¿Cómo obtener memoria disponible C++/g ++?
Editar: Lo hice con asignación de memoria configurable. Entiendo que no es una buena idea, ya que la mayoría de los sistemas operativos administran la memoria para nosotros, pero mi aplicación era un marco ETL (destinado a ser utilizado en el servidor, pero también se usaba en el escritorio como complemento para el diseño de Adobe). Por lo tanto, me estaba ejecutando para emitir porque en lugar de usar swap, Windows devolvería mala alloc y otras aplicaciones comenzarían a fallar. Y como me enseñaron a evitar choques, estaba tratando de degradarme con gracia.
No tiene sentido hacer esto.En todos los sistemas operativos modernos, la memoria utilizada por una aplicación no afecta la memoria disponible para otras aplicaciones, ya que es completamente virtual. Solo asigna lo que requieres. –
@LokiAstari: falso, por supuesto. un sistema tiene mucho que puede asignar. Elegí no tener archivos de intercambio, por lo que mi sistema tiene 8GiB, después de eso, C++ llama a 'new' throw' bad_alloc' y falla otra aplicación. En linux y ventanas recientes hay un OOM Killer que elegirá una aplicación para matar. un virus podría asignar muchas cosas en múltiples procesos y usar ese hecho para bloquear otras aplicaciones. Sin mencionar, si tiene un archivo de página, el sistema se acumulará y se congelará hasta que no se pueda usar. (generalmente el WM solo muere, pero en Windows no hay Ctrl-Alt-F1) –
@ v.oddou: nada de eso es relevante para el contexto de la pregunta. Por lo tanto, mi comentario se mantiene. –