Как компиляторы C ++ объединяют идентичные строковые литералы

Как компилятор (MS Visual C ++ 2010) объединить идентичные строковые литералы в разных исходных файлах cpp? Например, если у меня есть строковый литерал «hello world \ n» в src1.cpp и src2.cpp соответственно. Скомпилированный exe-файл будет иметь только 1 строковый литерал «hello world», вероятно, в разделе constant / readonly. Выполняется ли эта задача компоновщиком?

Я надеюсь достичь того, что у меня есть несколько модулей, написанных на ассемблере для использования модулями C ++. И эти модули сборки содержат множество определений длинных строковых литералов. Я знаю, что строковые литералы идентичны некоторым другим строковым литералам в исходном коде C ++. Если я свяжу сгенерированный сборкой код obj с кодом obj, созданным компилятором, будут ли эти строковые литералы объединены компоновщиком для удаления избыточных строк, как в случае, когда все модули находятся на C ++?

15
задан JavaMan 9 June 2011 в 09:39
поделиться