Property и Fields?
Да, при создании автосвойства создаётся скрытая переменная - данные должны где-то храниться. 
Эта переменная создаётся с хитрым именем (с запрещёнными в c# символами в имени переменной). Можно увидеть это таким способом:class TestClass
{
    private int _a;
    public int A
    {
        get { return _a; }
        set { _a = value; }
    }

    public int B { get; set; }
}

var testClass = typeof(TestClass);
var fields = testClass.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var fieldInfo in fields)
{
    Console.WriteLine(fieldInfo.Name);
}
// результат:
// _a
// <B>k__BackingField
Свойства - это лишь абстракция. Любое свойство с геттером и сеттером по сути разворачивается в два обыкновенных метода. Для программы они ничем не выделяются особенным, это нужно лишь программисту.
В этих самых геттерах и сеттерах ты можешь работать с полями, как и в любом другом методе класса. 
Автосвойство - это лишь упрощение, если требуется свойство, в котором кроме установки значения одного поля, иной логики нет. В закулисье автосвойство просто само по себе создаёт поле и два (или один) метод, который возвращает значение этого поля (или устанавливает).
Что касается памяти: поле занимает место в памяти и для каждого экземпляра своё место. Геттеры и сеттеры свойства, как и обыкновенные методы - только один раз в памяти.