como se le preguntó en la pregunta.
std :: string myVar; El carácter máximo que puede contener está dictado por la pila o el montón?C++ std máximo :: la longitud de la cadena viene dictada por el tamaño de pila o el tamaño de pila?
que
como se le preguntó en la pregunta.
std :: string myVar; El carácter máximo que puede contener está dictado por la pila o el montón?C++ std máximo :: la longitud de la cadena viene dictada por el tamaño de pila o el tamaño de pila?
que
Gracias Por defecto, la memoria asignada para std::string
se asigna dinámicamente.
Tenga en cuenta que std::string
tiene una función que devuelve el número máximo de caracteres admitidos por la implementación. La utilidad de esto es cuestionable, ya que es un máximo de implementación, y no toma en consideración otros recursos, como la memoria. Tu límite real es mucho más bajo. (Intenta asignar 4 GB de memoria contigua, ni tomó en el agotamiento de memoria cuenta en otros lugares.)
Un objeto std::string
se asignará la misma forma en que un int
o cualquier otro tipo debe ser: en la pila si se trata de una variable local, o podría ser static
, o en el montón si se utiliza o new std::string
new X
donde X
contiene el string
etc ..
embargo, que std::string
objeto puede contienen al menos un puntero a la memoria adicional proporcionada por el asignador con la que basic_string < > se creó una instancia - para el std::string
typedef
eso significa memoria asignada en el montón. Ya sea directamente en la memoria original std::string
objeto o en punta-a amontonar se puede esperar encontrar:
algunas implementaciones std::string
tienen optimizaciones "cadena corta" donde se embalan cadenas de sólo unos pocos caracteres directamente en el propio objeto de cadena (por eficiencia de la memoria, a menudo utilizando algún tipo de unión con campos que se usan para otros fines cuando las cadenas son más largas). Pero, para otras implementaciones de cadenas, e incluso para aquellas con optimizaciones de cadenas cortas cuando se trata de cadenas que son demasiado largas para caber directamente en el objeto std :: string, tendrán que seguir punteros/referencias a los datos textuales que se almacenan en la memoria proporcionada por el asignador (montón).
ah, pensé que sería una pila limitada porque se parece a cualquier otra var. Supongo que cualquier objeto std :: se asigna en montón? – eugene
@Eugene: no, 'myVar' está asignado a la pila, sin embargo, contiene un búfer interno para almacenar la cadena asignada en el montón (en general). Los contenedores std usualmente toman un parámetro 'Allocator' que se encarga de asignar recursos, y generalmente asigna en el montón, aunque podría (en teoría) asignar en la pila. –
@Eugene depende, pero para los contenedores, sí, los datos están en montón normalmente. siempre puedes hackear un asignador para "usar" la pila (bleh). – Anycorn