南京的险要地势其实有一半毁在王安石填埋玄武湖上面,古玄武湖实际上包含了今天新模范马路以北、中山北路以东的大片地域,也就是说,今天的中央门-神策门为主的南京北侧城墙地带,在北宋之前都是湖泊,这就导致在北宋以前,攻打南京实际上只能从南京西南方向来,整个西、北、东三面都不能有效围城,而王安石填埋了玄武湖,导致整个城市东北面出现大批土地,而北宋时期的南京城实际上就是今天中山东路以南、汉中门以东,加上城南地区的明城墙,这就导致北来的入侵者可以在城北直接登陆而没有屏障,且玄武湖水系的破坏还导致整个北宋时期南京频繁内涝,这也是南宋定都杭州的原因,今天的玄武湖实际上是元朝时期重新挖掘,明朝朱元璋时期为了训练水军对抗陈友谅再加深挖掘的,规模已经大不如前。

元朝时期为了填王安石留下的大坑,重新挖掘玄武湖,朱元璋时期进一步加大挖掘力度,试图恢复古玄武湖的面积,为此朱元璋一度想把城墙从今天南京的解放门位置直接向西修筑,相当于想把解放门以北变成湖泊,原来的南京城墙北线相当于想穿到今天的草场门就告终,把狮子山留在外面作为制高点,整个北线外就是宽大的玄武湖,但是因为这样会破坏大量耕地,且挖湖的预算也是巨大,比起如此巨大的水利工程,修筑城墙居然相对还便宜点,所以朱元璋就从解放门往北修筑城墙,这也是今天南京玄武湖明城墙公园那边有2道城墙的原因--其中一部分是明朝停工的半截城墙,朱元璋将城墙往北修筑,把大量土地圈在城墙里面,避免了攻城方有大量土地预备进攻的问题,且直到晚清年间,这部分土地实际上还是耕地,这就确保了南京在围城期间的粮食供给,洪秀全不怕长期围城的原因之一就在此,太平天国时期的南京城墙里面有三分之一面积其实是农田,但是这样做也没有解决全部问题。
北宋之前,玄武湖水深很高,达到15米上下,实际上玄武湖南岸的太平门一带也是12-15米水深,且岸边没有浅滩,所以那时候没有在玄武湖搞登陆的,宋代以后的元朝虽然挖出了玄武湖,明朝继续加深水深,但是太平门地区的水深始终没有恢复,今天去太平门看也发现那边沼泽很多,有很多荷花塘,这就导致在钟山山脉和玄武湖之间有很宽的一段距离,而这段地域在古代实际上是一个很深且有断崖式的地貌,因此敌方可以从城市北面绕行紫金山西南边,直接到这个地带,集中攻打太平门,这也是明朝南京城墙在北面最大的罩门--俗称‘龙脖子’,湘军就是在龙脖子破城的。
从历史上看,南北朝时期之前,实际上‘守城’一般也不据守大型城市,因为兵力密度不足,且当时农业生产水平不足,供应大量守军的难度也很大,所以东西魏时期反复争夺洛阳,基本上都是攻城一方到了洛阳城附近,守城的人员就缩进金庸城,然后在金庸城固守,攻城方面即使占据了洛阳主城,金庸城依然可以居高临下攻击敌军,并配合外来援军中心开花,南北朝时期的南京设计也是这样的,南北朝时期建业城主要是通过宫城实施防御,外面还额外修筑了新亭、白下2个小城,确保敌军来攻击的时候必须分散兵力去袭击这些据点,形成互为犄角的态势,以便等待外援,南京在梁武帝时期遭受侯景围攻,梁武帝实际上就是按照这个预案布置的,只不过梁武帝没想到他的几个儿子居然能在城池外面坐等他死亡才分赃,这才导致防御失败,而随后北齐几次渡江,在防守方劣势不太大的情况下,陈霸先等人都是有效防御的。
明朝的南京城设计和南北朝时期完全不同,明朝时期的南京主城墙的设计思路是把据点尽可能囊括在城墙内,因此城东的钟山山脉的一部分都被改建为城墙,理论上城东地区除了朝阳门(中山门)全是依托山脉据守的,城南地区是城墙最厚的部分,主要依托秦淮河修筑护城河,城西部分主要依托长江和外秦淮河防御,因此几次围城战没有从城西破城的,这个防御体系和之前还有不同就是它把城北大量农田围在其中,因此在长期围城期间可以保证农业生产,而这些农田实际上被玄武湖和长江环绕,因此也很能难袭击,这是长期围城期间,守军得以固守的主要依托。明代南京城的破城主要都发生在缺乏护城河有效防御,也没有山脉阻挡的地方,比如说太平天国破挹江门,湘军破太平门等,因此这个防御体系还算是有效的,直到晚近时期城墙在火炮曲射面前彻底丧失防御力后,南京的围攻重点才从城门转向天堡城、雨花台这2处制高点。