Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
8 / 8 / 3
Регистрация: 20.05.2012
Сообщений: 174

Результат компиляции промежуточного значения строки

22.01.2016, 16:06. Показов 1364. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня форумчанам.

Уж не знаю, как точнее назвать тему, потому, если кому-то не нравится - извольте.

Заинтересовал вопрос, в какие инструкции компилируется следующий код:
C#
1
2
3
4
5
6
string tmp = string.Empty;
List<string> someList = new List<string>(){ "Маша", "Даша", "Саша", "Юля", "Майя" }; //и пр.
for(int i = 0; i < 5; i++)
{
    tmp = List[i];
}
Мои размышления:
1) Либо при каждом обращении по индексу, создаётся новый экземпляр строки, куда копируются соответствующая из List, который, в свою очередь, копируется в tmp;
2) То же самое, что и в первом, только строки не копируются, а копируются указатели
3) При каждом обращении по индексу, полученное значение копируется сразу в tmp, без создания строки-посредника.
4) То же, что и в 4, только копируются не значения, а ссылки на уютное место в памяти?

Проясните пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2016, 16:06
Ответы с готовыми решениями:

Вычислить одно значение заданной функции для промежуточного значения аргумента (а)
Вычислить одно значение заданной функции для промежуточного значения аргумента (а) с помощью интерполяционного многочлена Лагранжа и...

Вывести с использованием форматной строки значения переменных и результат вычисления выражения
всем привет.мне надо сделать кучу задач,но я что то не могу разобраться.помогите пожалуйста с первой задачей,а дальше я уже сам разберусь...

Табулировать функцию на отрезке с шагом и вычислить значение данной функции для промежуточного значения аргумента.
Задание. 2. Табулировать функцию F(x) на отрезке 0;x3] с шагом h=(x3-x0)/3 и вычислить значение данной функции для промежуточного...

3
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
22.01.2016, 16:19
Вот исходники List, смотрите что происходит
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private string[] _items;
public T this[int index] {
    get {
        // Following trick can reduce the range check by one
        if ((uint) index >= (uint)_size) {
            ThrowHelper.ThrowArgumentOutOfRangeException();
        }
        Contract.EndContractBlock();
        return _items[index]; 
    }
 
    set {
        if ((uint) index >= (uint)_size) {
            ThrowHelper.ThrowArgumentOutOfRangeException();
        }
        Contract.EndContractBlock();
        _items[index] = value;
        _version++;
    }
}
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.01.2016, 16:39
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

Kamerton, ну во-первых зависит от версии debug/release. Но в любом случае

1. однозначно нет, строки - ссылочные типы, значит присваивается всегда указатель.
2. верно.
3. Не совсем понятно. Если про то, создается ли список со значениями - хз, на самом деле Скорее всего создается.

Почитай про интернирование строк. В любом случае копируются ссылки, а не сами строки, а в случае констант это вообще одна и та же строка, а вот в случае если она создается динамически - уже нет
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static void Check(string a, string b)
{
    const string format = "Строки {0} и {1} равны: {2}{3}Являются указателем на одну область памяти: {4}";
    Console.WriteLine(format, a, b, a == b, Environment.NewLine, ReferenceEquals(a, b));
}
 
static void Main()
{
    var someList = new List<string>() {"Маша", "Маша", "Маша", "Маша", "Майя"}; //и пр.
    string masha = new string(new[] {'М', 'а', 'ш', 'а'});
    Check(someList[0], someList[1]);
    Check(someList[0], masha);
}
2
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.01.2016, 22:35
Лучший ответ Сообщение было отмечено Kamerton как решение

Решение

Цитата Сообщение от Kamerton Посмотреть сообщение
в какие инструкции компилируется следующий код:
Kamerton,
1. Данный код (именно в том виде, что вы привели) вообще не компилируется).
2. Если вы вот про такой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
            string tmp = string.Empty;
            List<string> someList = new List<string>() { "Маша", "Даша", "Саша", "Юля", "Майя" };
            for (int i = 0; i < 5; i++) {
                tmp = someList[i];
            }
        }
    }
}
То он компилируется вот во что:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Размер кода:       104 (0x68)
  .maxstack  2
  .locals init ([0] string tmp,
           [1] class [mscorlib]System.Collections.Generic.List`1<string> someList,
           [2] int32 i,
           [3] class [mscorlib]System.Collections.Generic.List`1<string> '<>g__initLocal0',
           [4] bool CS$4$0000)
  IL_0000:  nop
  IL_0001:  ldsfld     string [mscorlib]System.String::Empty
  IL_0006:  stloc.0
  IL_0007:  newobj     instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
  IL_000c:  stloc.3
  IL_000d:  ldloc.3
  IL_000e:  ldstr      bytearray (1C 04 30 04 48 04 30 04 )                         // ..0.H.0.
  IL_0013:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
  IL_0018:  nop
  IL_0019:  ldloc.3
  IL_001a:  ldstr      bytearray (14 04 30 04 48 04 30 04 )                         // ..0.H.0.
  IL_001f:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
  IL_0024:  nop
  IL_0025:  ldloc.3
  IL_0026:  ldstr      bytearray (21 04 30 04 48 04 30 04 )                         // !.0.H.0.
  IL_002b:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
  IL_0030:  nop
  IL_0031:  ldloc.3
  IL_0032:  ldstr      bytearray (2E 04 3B 04 4F 04 )                               // ..;.O.
  IL_0037:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
  IL_003c:  nop
  IL_003d:  ldloc.3
  IL_003e:  ldstr      bytearray (1C 04 30 04 39 04 4F 04 )                         // ..0.9.O.
  IL_0043:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
  IL_0048:  nop
  IL_0049:  ldloc.3
  IL_004a:  stloc.1
  IL_004b:  ldc.i4.0
  IL_004c:  stloc.2
  IL_004d:  br.s       IL_005d
  IL_004f:  nop
  IL_0050:  ldloc.1
  IL_0051:  ldloc.2
  IL_0052:  callvirt   instance !0 class [mscorlib]System.Collections.Generic.List`1<string>::get_Item(int32)
  IL_0057:  stloc.0
  IL_0058:  nop
  IL_0059:  ldloc.2
  IL_005a:  ldc.i4.1
  IL_005b:  add
  IL_005c:  stloc.2
  IL_005d:  ldloc.2
  IL_005e:  ldc.i4.5
  IL_005f:  clt
  IL_0061:  stloc.s    CS$4$0000
  IL_0063:  ldloc.s    CS$4$0000
  IL_0065:  brtrue.s   IL_004f
  IL_0067:  ret
} // end of method Program::Main
Если язык IL вам знаком, то разберетесь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2016, 22:35
Помогаю со студенческими работами здесь

Результат компиляции
Скажите, в какой язык компилируются современные программы написанные на с/с++? И какие языки понимает х86 пк? Как я подозреваю - ассемблер.

Ошибка компиляции как положительный результат
Товарищи, подскажите, пожалуйста, есть ли возможность средствами плюсов следить за ошибками компиляции? Необходимо в процессе...

Вывести результат компиляции в *.txt файл
у меня есть така матрица, надо вывести результат компиляции в *.txt файл #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Intellij IDEA не отображает результат компиляции
Добрый вечер. Установил Intellij IDEA последней версии. Пишу свой первый код, Hello World Запускаю компиляцию, дает ответ, что...

Антивирус Касперского считает зараженным результат компиляции
Здравствуйте. Второй раз уже сталкиваюсь с .. трояном? Скрин прилагается. &quot;Сейчас я Вам все там почистию&quot; - сказал Касперский. Ага. Не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru